为什么按钮在LWUIT中没有动作侦听器和命令?

时间:2012-07-25 16:28:05

标签: java mobile java-me lwuit actionlistener

为什么在LWUIT中Button可以拥有自己的ActionListener(通过button.addActionListener),而Command却没有?

获取特定命令的侦听器的唯一方法是将ActionListener添加到表单并检查侦听器,该事件来自哪个Command,如下所示?

    public void startApp() {
    Display.init(this);
    f = new Form("Mixed Record");
    exit = new Command("Exit");
    start = new Command("Start");
    Button button = new Button("Button");

    f.addCommand(exit);
    f.addCommand(start);
    f.addCommand(delete);
    f.addComponent(button);

    f.addCommandListener(new ActionListener() {

        public void actionPerformed(ActionEvent ae) {
            if (ae.getCommand().equals(exit)) {
                //Do Exit command code
            } else if (ae.getCommand().equals(start)) {
                //Do Start command code
            }
        }
    });

    button.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent ae) {
            //Do button code
        }
    });

    f.show();
}

1 个答案:

答案 0 :(得分:6)

好吧,我不能确切地告诉你为什么编写LWUIT的人做出了这个决定,但有几个原因可以解释。

当表单包含多个命令时,它们会在菜单中分组。每次用户展开然后折叠菜单时,最多执行一个Command。因此,命令在概念上比Buttons更多地相互链接,特别是因为将Button子类从一个Form重用到另一个Form并不罕见。

可能还有一个问题是让LWUIT表格的API看起来很像MIDP规范中的LCDUI表格。

我也喜欢你的代码显示决定的一个积极结果:

您的代码中已经有2个未命名的内部类(ActionListener子类)。如果每个Command都有自己的ActionListener,那么你可能已经编写了3个未命名的内部类。开发人员往往会做很多事情,即使你花了一些时间查看包含多个未命名内部类的代码的堆栈跟踪,你会发现在每个命名类中有多个代码是不好的做法。 / p>