如何在J2ME应用程序中的表单上创建按钮?

时间:2013-02-02 20:34:20

标签: button java-me midp lcdui

我尝试创建一个简单的“hello world”应用程序,在单击按钮时,它会打印一个字符串“hello world”。如何在表单上添加按钮?

我需要创建一个按钮,当我点击它时可以生成一个字符串。如何在j2me中不使用画布添加按钮?

2 个答案:

答案 0 :(得分:4)

从我在旧的J2ME书中找到的类图中,在http://www.stardeveloper.com/articles/display.html?article=2002121101&page=2处于联机状态,似乎J2ME没有按钮。老手机上不需要它们。

只需创建一个“hello”命令并将其添加到菜单或表单中。然后,系统会将其放在设备上可用的任何按钮上。对于触摸屏设备,可能会将其变成可点击的东西。

这是代码

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;


public class HelloWorld extends MIDlet implements CommandListener {

    private static final String HELLO_WORLD = "Hello, World!!";

    private Form form= new Form ("");

    private Command exit= new Command("Exit", Command.EXIT, 0x01);
    private Command ok= new Command("OK", Command.OK, 0x01);
    private Command hello= new Command("HELLO", Command.SCREEN, 0x01);

    private TextBox textBox= new TextBox("Hello World", HELLO_WORLD, HELLO_WORLD.length(), TextField.UNEDITABLE);

    public HelloWorld() {
        this.form.addCommand(exit);
        this.form.addCommand(hello);
        this.form.setCommandListener(this);
        this.textBox.addCommand(ok);
        this.textBox.addCommand(exit);
        this.textBox.setCommandListener(this);
    }

    protected void destroyApp(boolean unconditional)
            throws MIDletStateChangeException { }

    protected void pauseApp() { }

    protected void startApp() throws MIDletStateChangeException {
        Display.getDisplay(this).setCurrent(this.form);
    }

    public void commandAction(Command c, Displayable d) {
        if (c == this.exit) {
            this.notifyDestroyed();
        }
        if(c == this.ok) {
            Display.getDisplay(this).setCurrent(this.form);         
        }
        if(c == this.hello) {
            Display.getDisplay(this).setCurrent(this.textBox);          
        }
    }

}

答案 1 :(得分:4)

有一个API,但你最好还是三思而后行。

API在Appearance modes section for lcdui Item objects

中被解析
  

StringItem和ImageItem类具有可在其构造函数中设置的外观模式属性。此属性可以包含值PLAIN,HYPERLINK或BUTTON之一。 PLAIN的外观模式通常用于文本或图形材料的非交互式显示。外观模式值对项目的交互性没有任何副作用。为了实现交互,该项必须具有一个或多个命令(最好分配一个默认命令),并且它必须具有一个CommandListener,它接收Command调用的通知......

     

BUTTON模式下的 StringItem或ImageItem可用于创建基于按钮的用户界面 ...

请注意,本节还说明了使用按钮外观可能有问题的情况:

  

...这很容易导致应用程序不方便使用。例如,在基于遍历的系统中,用户必须先导航到按钮才能调用其上的任何命令。如果按钮分布在长表格中,则可能要求用户执行大量导航以发现所有可用命令。此外,从窗体另一端的按钮调用命令可能非常麻烦。基于遍历的系统通常提供从任何地方(例如从菜单)调用命令的方法,而无需遍历到特定项目。如果将该命令直接添加到表单,则不会向按钮添加命令并将该按钮放入表单中,而是对用户来说通常更合适和方便。仅当用户与项目的字符串或图像内容进行直接交互对于用户理解可以从该项目调用的命令至关重要时,才应使用按钮。