为什么在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();
}
答案 0 :(得分:6)
好吧,我不能确切地告诉你为什么编写LWUIT的人做出了这个决定,但有几个原因可以解释。
当表单包含多个命令时,它们会在菜单中分组。每次用户展开然后折叠菜单时,最多执行一个Command。因此,命令在概念上比Buttons更多地相互链接,特别是因为将Button子类从一个Form重用到另一个Form并不罕见。
可能还有一个问题是让LWUIT表格的API看起来很像MIDP规范中的LCDUI表格。
我也喜欢你的代码显示决定的一个积极结果:
您的代码中已经有2个未命名的内部类(ActionListener子类)。如果每个Command都有自己的ActionListener,那么你可能已经编写了3个未命名的内部类。开发人员往往会做很多事情,即使你花了一些时间查看包含多个未命名内部类的代码的堆栈跟踪,你会发现在每个命名类中有多个代码是不好的做法。 / p>