5

是否有任何理由在 LWUIT 中,Button 可以拥有自己的 ActionListener(通过 button.addActionListener)而 Command 没有?

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

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

1 回答 1

6

好吧,我不能确切地告诉你写 LWUIT 的人为什么会做出这个决定,但有几个原因可以说明它的合理性。

当一个表单包含多个命令时,它们被分组在一个菜单中。每次用户展开然后折叠菜单时,最多执行一个命令。因此,从概念上讲,命令之间的联系比按钮更紧密,特别是因为将按钮子类从一个窗体重用到另一个窗体的情况并不少见。

也可能有人担心 LWUIT 表单的 API 看起来很像 MIDP 规范中的 LCDUI 表单。

我也喜欢您的代码显示了该决定的一个积极后果:

您的代码中已经有 2 个未命名的内部类(ActionListener 子类)。如果每个 Command 都有自己的 ActionListener,您可能会编写 3 个未命名的内部类。开发人员经常这样做,尽管当您花更多时间查看包含多个未命名内部类的代码的堆栈跟踪时,您会意识到在每个命名类中拥有多个内部类是不好的做法。

于 2012-07-25T20:16:21.527 回答