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
页:
[1]