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

Boo*_*oon 5 java mobile lwuit actionlistener java-me

是否有任何理由为什么在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();
}
Run Code Online (Sandbox Code Playgroud)

mic*_*ert 6

好吧,我不能确切地告诉你为什么编写LWUIT的人做出了这个决定,但有几个原因让它变得有意义.

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

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

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

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