Java me j2me程序创建一个网格菜单?

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[][]

我想在网格视图中创建一个操作列表。例如,访问此URL

您可以查看这个或这个(并使用LWUITCustomItems)或扩展“画布”。这样,您需要在网格视图中为每个操作创建两个图片。一个用于正常状态,另一个用于高亮显示。下面是一个简单的画布,表示2*2网格中的4个操作:

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改为绘制图像