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