j2me 分行显示字符 (经过改良的)

/** * 看过网友 一滴蔚蓝色的 j2me低级界面文字分行显示解决方法后, * 网址:http://www.j2megame.org/index.php/content/view/1864/125.html 很受启发 * 但是仔细研究后,发现有一些缺陷 现把经过改良后的方法写出来 */ public void paint(Graphics g) { Font font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM); g.setColor(125, 125, 125); g.fillRect(0, getHeight() / 2, getWidth(), getHeight()); g.setFont(font); g.setColor(0, 0, 0); Vector vc = MulString("屏幕分行显示解决方法,屏幕分行显示解决方法,屏幕分行显示解决方法在做项目的时候" + "遇到屏幕分行显示文字的问题参考了部分资料之后" + "写了如下解决方案没有考虑英文单词避免换行的问题"); for (int i = 0; i < vc.size(); i++) { g .drawString(vc.elementAt(i).toString(), 0, font.getHeight() * i, 0); } } /** * * @param string * @return * @todo 思路是这样的,顺序判断字符串中每个字符的像素宽度 当前i+1个字符的总宽度超过屏幕的宽度时候 * 取前i个字符放入容器,最后,把不满一行的所有字符再装入容器,需要显示的时候再顺序取出字符。 */ protected Vector MulString(String string) { Vector vc = new Vector(); Font font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM); int width = 0; // 记录当前宽度,如果大于屏幕宽度,就添加到Vector int iPre = 0; // 添加到Vector中字符串在原字符串中的起始位 int iNum = 0; // 原字符串的总长度 /**之前见过好多网友都这样写的for循环 这样写是有一定弊端的,就是第一行会少显示一个字符*/ // for (int i = 0; i < string.length(); i++) { // iNum++; // width += font.charWidth(string.charAt(i)); // if (width >= (getWidth() - 2)) { // vc.addElement(string.substring(iPre, i)); // iPre = i; // width = 0; // } // } /**for循环里的处理是经过改良的*/ for (int i = 0; i < string.length(); i++) { iNum++; width += font.charWidth(string.charAt(i)); if (i + 1 < string.length()) {// 防止数组越界 if (width + font.charWidth(string.charAt(i + 1)) > (getWidth())) { vc.addElement(string.substring(iPre, i + 1)); iPre = i + 1; width = 0; } } } vc.addElement(string.substring(iPre, iNum)); return vc; }  

 

你可能感兴趣的:(j2me 分行显示字符 (经过改良的))