Проблема с изображением кнопки

привет. Я хочу кое-что спросить у вас здесь. Я знаю, что это может быть легко для вас, но это может быть трудно для меня. Я изучаю новый J2ME. Я хочу знать основы языков программирования. У меня такой случай:

class DrawImageCanvas extends Canvas {

    static Image image;
    static Image image2;
    static Image image3;
    static Image image4;
    static Image image5;
    static Image image6;
    static String string; 

    int count;

    public void paint(Graphics g) {
        int width = getWidth();
        int height = getHeight();

        // Fill the background using black
        g.setColor(0xefffff);
        g.fillRect(0, 0, width, height);

        // Load an image from the MIDlet resources
        if (image == null && image2 == null && image3 == null && image4 == null && image5 == null && image6 == null) {
            try {
                image = Image.createImage("/http.png");
                image2 = Image.createImage("/Back.png");
                image3 = Image.createImage("/next.png");
                image4 = Image.createImage("/refresh.png");
                image5 = Image.createImage("/stop.png");
                image6 = Image.createImage("/Bookmark.png");
                string = new String("Disini tempat halaman web ditampilkan");
            } catch (IOException ex) {
                g.setColor(0xffffff);
                g.drawString("Failed to load image!", 0, 0, Graphics.TOP | Graphics.LEFT);
                return;
            }
        }


         g.drawImage(image, 5, 5, Graphics.TOP | Graphics.LEFT);    
         g.drawImage(image2, 90, 5, Graphics.TOP | Graphics.LEFT);
         g.drawImage(image3, 120, 5, Graphics.TOP | Graphics.LEFT);
         g.drawImage(image4, 150, 5, Graphics.TOP | Graphics.LEFT);
         g.drawImage(image5, 180, 5, Graphics.TOP | Graphics.LEFT);
         g.drawImage(image6, 210, 5, Graphics.TOP | Graphics.LEFT);
         g.drawString(string, 5, 36, Graphics.TOP | Graphics.LEFT);
    }
}

Я хочу знать, как изменить изображение на кнопку изображения (функция клавиши). пожалуйста помоги


я пытался добавить код с событием нажатия клавиши, но это сбивает меня с толку

затем я пытаюсь добавить ГРАФИКУ, но... я думаю, что она используется только на холсте

это мой новый код, это результат, аналогичный предыдущему результату

public void startApp() {
    display = Display.getDisplay(this);
    exit = new Command("Exit", Command.EXIT, 1);
    form = new Form("");    
    form.addCommand(exit);
    form.setCommandListener(this);   
    try { 
      Image image = Image.createImage("/http.png");
      Image image2 = Image.createImage("/Back.png");
      Image image3 = Image.createImage("/next.png");
      Image image4 = Image.createImage("/refresh.png");
      Image image5 = Image.createImage("/stop.png");
      Image image6 = Image.createImage("/Bookmark.png");
      form.append(new ImageItem(null, image, ImageItem.LAYOUT_LEFT | ImageItem.LAYOUT_LEFT | ImageItem.LAYOUT_LEFT, null));
      form.append(new ImageItem(null, image2, ImageItem.LAYOUT_LEFT | ImageItem.LAYOUT_LEFT | ImageItem.LAYOUT_LEFT, null));
      form.append(new ImageItem(null, image3, ImageItem.LAYOUT_LEFT | ImageItem.LAYOUT_LEFT | ImageItem.LAYOUT_LEFT, null));
      form.append(new ImageItem(null, image4, ImageItem.LAYOUT_LEFT | ImageItem.LAYOUT_LEFT | ImageItem.LAYOUT_LEFT, null));
      form.append(new ImageItem(null, image5, ImageItem.LAYOUT_LEFT | ImageItem.LAYOUT_LEFT | ImageItem.LAYOUT_LEFT, null)); 
      form.append(new ImageItem(null, image6, ImageItem.LAYOUT_LEFT | ImageItem.LAYOUT_LEFT | ImageItem.LAYOUT_NEWLINE_AFTER, null));   

      display.setCurrent(form);
    }catch (java.io.IOException e){
      System.err.println(e);
    }
    display.setCurrent(form);
  }

но проблема в том, что я не знаю, как сделать изображение как кнопку. я новичок в J2me, пожалуйста, помогите


person Ahmad Ramdani    schedule 18.08.2009    source источник
comment
StackOverflow — это не форум; если у вас есть новый вопрос, пожалуйста, задайте новый вопрос. Если вы хотите включить в свой вопрос дополнительную информацию, отредактируйте его. Если вы хотите пообщаться с одним из ответивших людей, вы можете оставить им комментарий.   -  person    schedule 25.03.2011


Ответы (3)


Вы можете сохранить какую-то структуру данных ваших кнопок, указывающую порядок обхода. Затем вы можете прослушивать события нажатия клавиш на своем холсте и в зависимости от того, какая клавиша была нажата (например, влево, вправо, вверх, вниз, выбор и т. д.), вы можете обновить, какая из кнопок сейчас находится в фокусе (используя простой индекс в вашем структура данных). Ваш метод рисования можно расширить, чтобы нарисовать какую-то рамку вокруг изображения, находящегося в фокусе.

Теперь, когда вы слушаете нажатие клавиши выбора, вы будете знать, какая кнопка имеет фокус и, следовательно, какое действие выполнить.

Более сложные проблемы здесь будут обновляться (перекрашивать экран) после каждого нажатия клавиши, чтобы обновить изображение и т. д., чтобы показать, какое из них находится в фокусе. Вы не хотели бы перерисовывать весь экран, вместо этого вы можете определить области экрана для перерисовки в зависимости от того, какие кнопки будут изменены (например, кнопка, которая ранее имела фокус, и кнопка, которая теперь имеет фокус).

Другой альтернативой было бы не использовать низкоуровневый класс холста, а вместо этого рассмотреть использование фреймворка, такого как LWUIT, который предоставляет кнопки и т. Д. И менеджеры компоновки, очень похожие на Swing. Это может быть намного проще, чем пытаться рисовать (в браузере, судя по всему), используя низкоуровневый API.

person DaveJohnston    schedule 19.08.2009
comment
я все еще получаю стопку этого дела .. я хочу отправить свой код на вашу почту. и мне нужно помочь вам. - person Ahmad Ramdani; 13.09.2009
comment
С какой частью у вас проблемы? Вы пробовали мое предложение в моем другом ответе? - person DaveJohnston; 14.09.2009
comment
да, я попробовал ваше предложение... и проблема в том, что я попытался добавить команду в ImageItem. - person Ahmad Ramdani; 15.09.2009
comment
А в чем конкретно была проблема? - person DaveJohnston; 15.09.2009

Вы не можете создать кнопку на холсте в J2ME, но есть альтернативы:

  • Используйте javax.microedition.lcdui.Form, добавьте к нему ImageItem с внешним видом BUTTON, добавьте команду к ImageItem.

  • Используйте события ключа и/или указателя в DrawImageCanvas, переопределяя Canvas.keyPressed(), Canvas.keyreleased(), Canvas.pointerPressed() и/или Canvas.pointerReleased(). Вы даже можете добавить рамку к изображению, чтобы оно больше походило на кнопку.

  • Возможно, вы захотите поэкспериментировать с javax.microedition.lcdui.CustomItem внутри формы в качестве промежуточного решения.

Для всех этих классов и методов есть достойная документация в спецификации MIDP:

http://www.jcp.org/en/jsr/detail?id= 118

Вы также можете посмотреть документацию LWUIT. Это графическая библиотека с открытым исходным кодом, опубликованная Sun.

person michael aubert    schedule 19.08.2009

Попробуйте установить режим внешнего вида объекта ImageItem на Item.BUTTON, например.

ImageItem item = new ImageItem(null, image, ImageItem.LAYOUT_LEFT, null, Item.BUTTON);

Также попробуйте добавить команду в ImageItem.

item.setDefaultCommand(new Command("Back", Command.ITEM, 1); 

Затем, наконец, определите CommandListener:

item.setItemCommandListener(/* itemCommandListener */);
person DaveJohnston    schedule 06.09.2009