j2me программа для создания меню GRID? - PullRequest
1 голос
/ 01 апреля 2012

Я хочу создать список операций в виде сетки.Например, посетите этот URL.

http://cdn -static.cnet.co.uk / i / product_media / 40000186 / nokia1616_01.jpg

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

Если вы не можете использовать LWUIT (лицензия, размер библиотеки и т. Д.) И не хотите оставлять отображение экрана на LCDUI (CustomItem), вам следует расширить Canvas.

У меня есть общий код для адаптивной сетки на http://smallandadaptive.blogspot.com.br/2010/12/touch-menu.html Не стесняйтесь использовать его.
В этом примере все элементы являются строками, но вы можете изменить TouchItem для рисования изображений.

0 голосов
/ 02 апреля 2012

Вы можете посмотреть на этот вопрос или на эту страницу (и использовать LWUIT или CustomItems ) или расширить "холст ". Таким образом, вам нужно два изображения для каждой операции в виде сетки. Один для нормального состояния и другой для выделенного. Вот простой холст, который представляет 4 операции в сетке 2 * 2:

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();
    }
}   

В реальных примерах вы должны определять gridColumnNo и gridRowNo по размеру экрана и значков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...