自己实现操作Canvas,很大部分是对文字的显示以及排版操作。而对字体的定义则每个厂商都有自己的规范,必然nokia定义了大,中,小字体。而我在其他手机上只有一种字体,所以无论你怎么样定义字体的大小都只有一种效果,这样的话。你可能要在程序中自己进行判断,然后在显示出来。要不然的话,则写出的程序在各个机型上显示的效果会有一些不同。
下面让我们来设计可以滚动的TextBox.
首先继承Part(UI的第一篇文章有给出代码)
public class TextBox extends Part {
/** 文本的行数 */
private int numOfEls;
/**
* 此页面最多显示得行数
*/
private int maxNum;
private int pillarHeight;
/** 开始索引 * */
private int startIndex;
/**
* 文本的内容
*/
private char [] textChars;
/**
* 文本切割后得内容
*/
private String[] textNum;
private String text;
public void setString(String text) {
this.text = text;
this.textChars = text.toCharArray();
skipContent();
//numOfEls = textChars.length;
}
/**
* 分割字符传.并处理pillar的高度,最主要的方法。
* 通过屏幕的高,宽,以及字体的体型进行文本出来。并把处理后的文本保存在一个Vector中,以后绘制出来就容易多了
*
*/
private void skipContent(){
this.numOfEls = FontUtil.siptRow(this.contentStyle.font,
viewContent[WIDTH],text);
int charWidth = viewContent[X]+ 2;
int charHeight = viewContent[Y];
int h;
if(numOfEls>this.maxNum){
h = (viewContent[WIDTH]-18);
}else{
h = (viewContent[WIDTH]-12);
}
StringBuffer sb = new StringBuffer();
Vector ve = new Vector();
for(int i=0 ; i < this.textChars.length; i++){
sb.append(textChars[i]);
charWidth = charWidth + contentStyle.font.charWidth(textChars[i]);
if(charWidth>h){
charHeight = charHeight + contentStyle.font.getHeight() ;
charWidth = viewContent[X] + 2;
ve.addElement(sb.toString());
log.debug(sb);
sb = null;
sb = new StringBuffer();
}
}
ve.addElement(sb.toString());
log.debug(sb);
textNum = new String[ve.size()];
ve.copyInto(this.textNum);
ve.removeAllElements();
ve = null;
//获取最大的数组值
maxNum = viewContent[HEIGHT]/(this.contentStyle.font.getHeight() ) ;
this.numOfEls = this.textNum.length;
this.pillarHeight = numOfEls > maxNum ? viewContent[HEIGHT]/(numOfEls-maxNum +1):0;
log.debug("MaxNum=" + maxNum);
log.debug("numOfEls=" + numOfEls);
}
/**
* 绘制文本的内容,自动实现,状态条的显示等
* @param g
*/
private void paintContent(Graphics g) {
this.contentStyle.setFontColor(g);
int charWidth = viewContent[X]+ 2;
int charHeight = viewContent[Y];
int size = maxNum > this.numOfEls? numOfEls:maxNum;
log.debug(startIndex);
for(int i=startIndex ; i < size + startIndex; i++){
g.drawString(this.textNum[i],charWidth,charHeight,Graphics.TOP | Graphics.LEFT);
charHeight = charHeight + contentStyle.font.getHeight() ;
}
paintPillar(viewContent[WIDTH]-pillarWidth-4, viewContent[Y],g);
}
private void paintPillar(int x,int y,Graphics g){
if (maxNum > this.numOfEls)
return;
pillar.paint(x,y+(startIndex * pillarHeight),viewContent[WIDTH],this.pillarHeight,g);
}
以上代码是基本框架。思路就这样。实践起来也不困难。
分享到:
相关推荐
基于低级界面的j2me UI库类,有demo和源码。高级界面的东西虽然好用但是在不同的手机上面显示得不一样,有的好看有的很丑,但是基于低级界面的就不一样了。在不同手机上显示出来都是一样的,这个UI库类是企业级的。...
eswt j2me ui 界面 eswt j2me ui 界面 eswt j2me ui 界面
j2me ui lwuit 1.3 j2me UI库
TextBox和Command命令的用法 加上 退出!
MIE J2ME UI库 v1.0 说明: MIE UI库(下简称MIE)是一个开源的手机(J2ME)GUI编程框架,与PC电脑上的AWT/Swing/SWT有相似的用处。 MIE提供了一套基本的UI组件,包括文本标签、文本框、文本域、按钮、单选框、复选框...
good materials to learn s60 j2me UI development.
LWUIT实现了MVC架构,是J2ME程序中UI设计的一个JAR包。该文档是LWUIT帮助文档的CHM版
LWUIT J2ME UI框架 开发手册 LWUIT J2ME UI框架 开发手册
高级UI详细总结,和开发框架详细资料大全,里面有详细笔记以及总结!
制作漂亮的UI例子,九宫图 UIManager例子
lwuit开发文档,英文的,勉强看得下去,chem格式很受欢迎
mewt提供了一套轻便,可自定皮肤的j2me ui控件。这些控件能够根据不同设备的屏幕大小自动调整。当前提供的控件有: tree、table、list、button等。
j2me低级UI文字分行!希望对大家有用
绝对优秀的J2ME的课程设计,包括word文档(中文一份英文一份),Visio的设计逻辑图和逻辑图都有。
J2ME-UI 描述 ============== J2ME UI Canvas 代码,在 LWUIT 之类的东西出现之前就使用了; 同样,在 iOS 和 Android 流行之前。 或多或少过时的代码,此处用于存档目的。 支持 没有可用的支持 创造者 杰森林 ...
基于J2ME平台的手机游戏贪吃蛇程序的设计与实现
J2ME开发 J2ME开发 J2ME开发 J2ME开发
用底层CAVANS实现的一套UI,还有不完善的地方,欢迎PP
j2me公交车查询系统
javaweb毕业设计-JAVA基于J2ME的手机游戏开发(lw+源代码)(可做课程设计).rarjavaweb毕业设计-JAVA基于J2ME的手机游戏开发(lw+源代码)(可做课程设计).rarjavaweb毕业设计-JAVA基于J2ME的手机游戏开发(lw+源代码)(可做...