Java me j2me程序创建一个网格菜单?
我想在网格视图中创建一个操作列表。例如,访问此URL 您可以查看这个或这个(并使用LWUIT或CustomItems)或扩展“画布”。这样,您需要在网格视图中为每个操作创建两个图片。一个用于正常状态,另一个用于高亮显示。下面是一个简单的画布,表示2*2网格中的4个操作:Java me j2me程序创建一个网格菜单?,java-me,Java Me,我想在网格视图中创建一个操作列表。例如,访问此URL 您可以查看这个或这个(并使用LWUIT或CustomItems)或扩展“画布”。这样,您需要在网格视图中为每个操作创建两个图片。一个用于正常状态,另一个用于高亮显示。下面是一个简单的画布,表示2*2网格中的4个操作: public class GridCanvas extends Canvas { int highlightedRow = 0; int highlightedColumn = 0; Image[][]
public class GridCanvas extends Canvas {
int highlightedRow = 0;
int highlightedColumn = 0;
Image[][] normalImageMat;
Image[][] highlightedImageMat;
Image[][] imageMat;
int gridColumnNo;
int gridRowNo;
/**
* constructor
*/
public GridCanvas() {
gridColumnNo = 2;
gridRowNo = 2;
normalImageMat = new Image[gridRowNo][gridColumnNo];
highlightedImageMat = new Image[gridRowNo][gridColumnNo];
imageMat = new Image[gridRowNo][gridColumnNo];
try {
for (int i = 0; i < gridRowNo; i++) {
for (int j = 0; j < gridColumnNo; j++) {
normalImageMat[i][j] = Image.createImage("/hello/normalImage" + i + j + ".png");
}
}
for (int i = 0; i < gridRowNo; i++) {
for (int j = 0; j < gridColumnNo; j++) {
highlightedImageMat[i][j] = Image.createImage("/hello/highlightedImage" + i + j + ".png");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* paint
*/
public void paint(Graphics g) {
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
for (int i = 0; i < gridRowNo; i++) {
System.arraycopy(normalImageMat[i], 0, imageMat[i], 0, 2);
}
imageMat[highlightedRow][highlightedColumn] = highlightedImageMat[highlightedRow][highlightedColumn];
int width = 0;
int height = 0;
for (int i = 0; i < gridRowNo; i++) {
for (int j = 0; j < gridColumnNo; j++) {
g.drawImage(imageMat[i][j], width, height, 0);
width = width + imageMat[i][j].getWidth();
}
width = 0;
height = height + imageMat[0][0].getHeight();
}
}
/**
* Called when a key is pressed.
*/
protected void keyPressed(int keyCode) {
int gameAction = this.getGameAction(keyCode);
if (gameAction == RIGHT) {
highlightedColumn = Math.min(highlightedColumn + 1, gridColumnNo - 1);
} else if (gameAction == LEFT) {
highlightedColumn = Math.max(highlightedColumn - 1, 0);
} else if (gameAction == UP) {
highlightedRow = Math.max(0, highlightedRow - 1);
} else if (gameAction == DOWN) {
highlightedRow = Math.min(gridRowNo - 1, highlightedRow + 1);
}
repaint();
}
}
公共类GridCanvas扩展画布{
int highlightedRow=0;
int highlightedColumn=0;
图像[]normalImageMat;
图像[][]高亮显示图像;
图像[][]imageMat;
int-gridColumnNo;
int gridRowNo;
/**
*建造师
*/
公共网格画布(){
gridColumnNo=2;
gridRowNo=2;
normalImageMat=新图像[gridRowNo][gridColumnNo];
highlightedImageMat=新图像[gridRowNo][gridColumnNo];
imageMat=新图像[gridRowNo][gridColumnNo];
试一试{
for(int i=0;i
在实际示例中,由于屏幕和图标尺寸,您可能需要检测gridColumnNo和gridRowNo 如果您不能使用LWUIT(许可证、库大小等),并且不想将屏幕渲染留给LCDUI(CustomItem),则应扩展画布。 我已经分享了自适应网格的代码,请随意使用。
在此示例中,所有项目都是字符串,但您可以将TouchItem改为绘制图像