其中h表示画布的高度,title表示标题,index表示选中的下飚,还可以得到选中的标签和ID,支持触摸事件,这是个抽象类,要自己处理自己的事情,还需要实现doAction方法 即使点击OK按钮后需要执行的代码,界面做的太丑,背景色自己调吧。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhouyong19871123/archive/2010/06/02/5642240.aspx
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