2

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

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

4

2 回答 2

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

}
于 2013-02-03T21:04:25.357 回答
4

对此有一个 API,但您最好三思而后行是否真的需要它。

API 在lcdui 项目对象的外观模式部分中进行了描述

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

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

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

...这很容易导致应用程序使用不便。例如,在基于遍历的系统中,用户必须先导航到一个按钮,然后才能调用其上的任何命令。如果按钮分布在长表单中,用户可能需要执行大量导航才能发现所有可用命令。此外,从表单另一端的按钮调用命令可能非常麻烦。基于遍历的系统通常提供一种从任何地方(例如从菜单)调用命令的方法,而无需遍历特定项目。与其将命令添加到按钮并将该按钮放入表单中,不如将该命令直接添加到表单中对用户来说更合适和方便。

于 2013-02-03T22:31:51.650 回答