J2ME用 Canvas做的联系人list
其中h表示画布的高度,title表示标题,index表示选中的下飚,还可以得到选中的标签和ID,支持触摸事件,这是个抽象类,要自己处理自己的事情,还需要实现doAction方法即使点击OK按钮后需要执行的代码,界面做的太丑,背景色自己调吧。
import CanvasMidlet; import java.io.IOException; import java.util.Vector; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Font; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; public abstract class MyList extends Canvas{ CanvasMidlet parent = null; Vector names = null; Vector ids = null; int index = 0; // 当前选中操作目录索引 int h = 18; // 每条目录高度 int firstItem = 0; // 第一个ITEM int maxItemCount = this.getWidth() / h - 1; // 最多能显示多少个Item int startIndex = 0; // 开始索引 int endIndex = 0; // 结束索引 int tabIndex = 0; String title = ""; int topIndex = 0; String imageSrc = ""; public MyList(String title,Vector names,Vector ids,int topIndex,String imageSrc) { this.names = names; this.ids= ids; this.topIndex = topIndex; this.title = title; this.imageSrc = imageSrc; } protected void paint(Graphics g) { this.clearBgColor(g); drawTitle(g,this.title); this.showList(g, names); } /*个人通讯录*/ public void showList(Graphics g, Vector names) { if (names.size() <= maxItemCount) { endIndex = names.size(); } else { if (firstItem < 0) firstItem = 0; if (firstItem >= (names.size() - maxItemCount)) firstItem = names.size() - maxItemCount; this.startIndex = firstItem; endIndex = this.startIndex + this.maxItemCount; } this.drawList(g, startIndex, endIndex); } public void drawList(Graphics g, int st, int end) { Image image = null; // Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, // Font.SIZE_SMALL); int fontColor = 0; int j = 1; for (int i = st; i < end; i++) { int y1 = h * j + this.topIndex; int y2 = h * j + 3 +this.topIndex; j++; if (i == index) { fontColor = 0xffffff; g.setColor(0, 85, 153); g.fillRect(0, y1, getWidth(), h); } else { fontColor = 0; g.setColor(0xffffff); g.fillRect(0, y1, getWidth(), h); } try { image = Image.createImage(this.imageSrc); } catch (IOException e) { System.out.println("找不到文件"+this.imageSrc); e.printStackTrace(); } g.drawImage(image, 0, y2, 0); g.setColor(fontColor); // g.setFont(f); g.drawString(names.elementAt(i).toString(), 15, y1 + 1, Graphics.LEFT | Graphics.TOP); } } protected synchronized void keyPressed(int keyCode) { int action = getGameAction(keyCode); switch (action) { case DOWN: { if (index == names.size() - 1) { index = 0; firstItem = 0; } else { if (maxItemCount < names.size()) { if (index >= maxItemCount - 1) firstItem++; } index++; } this.repaint(); break; } case UP: { if (index == 0) { index = names.size() - 1; firstItem = names.size() - this.maxItemCount; } else { if (maxItemCount < names.size()) { if (index == firstItem) { firstItem--; } } index--; } this.repaint(); break; } case FIRE: { doAction(); break; } default: { break; } } } protected void pointerPressed(int x, int y) { if(y<18) return; //选中标题什么都不做 int count = y / h - 1; int clickIndex = firstItem + count; if(clickIndex > names.size()) return ;//选中空白地方 什么都不做 if(clickIndex != index){ index = clickIndex; this.repaint(); } } public abstract void doAction(); /*获取选中项名称*/ public String getSelectedName(){ return this.names.elementAt(index).toString(); } /*获取选中项ID*/ public int getSelectedID(){ return Integer.parseInt(names.elementAt(index).toString()); } /*获取选中项索引*/ public int getSelectedIndex(){ return index; } /*清除上一画布*/ public void clearBgColor(Graphics g){ g.setColor(0xffffff); g.fillRect(0, 0, this.getWidth(), this.getHeight()); } public void drawTitle(Graphics g,String title){ int width = Font.getDefaultFont().stringWidth(title); g.setColor(0); g.drawString(title, (this.getWidth() - width)/2 , 0, g.LEFT|g.TOP); //居中显示 } }
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhouyong19871123/archive/2010/06/02/5642240.aspx
相关推荐
大地飞鸿 2020-11-12
星星有所不知 2020-10-12
jinxiutong 2020-07-26
MIKUScallion 2020-07-05
songfens 2020-07-05
songfens 2020-06-11
songfens 2020-06-08
northwindx 2020-05-31
northwindx 2020-05-31
northwindx 2020-05-27
northwindx 2020-05-25
MIKUScallion 2020-05-25
jinxiutong 2020-05-10
xdyangxiaoromg 2020-05-10
大地飞鸿 2020-05-06
northwindx 2020-04-25