ComboBox box = b;
b.addActionListener(this);
不应该期待this.actionPerformed(event)
被称为 操作组合框的时候?
我有一个测试框架与几个组合框,它似乎正常运行 ,但没有actionPerformed
被称为。也许框架 本身需要以某种方式武装?
ComboBox box = b;
b.addActionListener(this);
不应该期待this.actionPerformed(event)
被称为 操作组合框的时候?
我有一个测试框架与几个组合框,它似乎正常运行 ,但没有actionPerformed
被称为。也许框架 本身需要以某种方式武装?
这里的正确答案。我使用com.codename1.ui.Dialog作为顶层窗口 。我切换到使用com.codename1.ui.Form 和现在的行动正在按预期发射。
由Dialog构造的环境中的东西(它扩展了Form) 正在干扰事件机制。也许通过设计。
没有这样的事情。但是,对话框是一个单独的窗体,并且被阻止,因此绑定事件的代码可能已放置在显示之后。 –
事件监听器是肯定安装的,但你的确是明显的区别是Dialog.show()阻止,但Form.show()不会。有线程环境的写作吗?好奇的事情(对我来说)是下拉菜单操作。我希望事件发布是由同一个线程完成的。 – ddyer
它的'invokeAndBlock'就是对话框在Swing/AWT/Codename中的工作方式只有我们把它带到下一个层次:http://www.codenameone.com/blog/callserially-the-edt-invokeandblock-part-1。 html http://www.codenameone.com/blog/callserially-the-edt-invokeandblock-part-2.html –
你的问题不是很清楚,你没有给它一个正确的标题。
如果你想的ActionListener添加到ComboBox
,你这是怎么做到这一点:
ComboBox box = new ComboBox();
box.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
}
});
这基本上就是我所做的,但操作执行的方法从未被调用,因为组合框被操纵。 – ddyer
根据我的理解,你只是想从一个类中创建一个ComboBox来处理动作事件。为此,我建议该类从ActionListener继承并覆盖(使用@Override标签)actionPerformed。如果该类不是从ActionListener继承的,则仅覆盖该操作的执行是不够的。
public class MyListener extends ActionListener {
@Override
public void actionPerformed (ActionEvent evt){
//code you want to execute when the event happens
}
public void methodCreatingComboBox(){
ComboBox b = new ComboBox();
b.addActionListener(this);
//other stuffs
}
}
这将工作像一个魅力!你可以使用同一个MyListener实例来处理多个事件。
这应该工作,我猜你可能有多个组合,可能是指错误的'actionPerformed'方法。您也可以通过在Codename One的'EventDispatcher'中放置一个监听器来将调试过程关注到Codename One代码本身中。http://www.codenameone.com/how-do-i-debug-into-codename-one-source-modify -it-contribution-it-back.html –
我使用旧的学校形式,这个类有一个actionperformed的方法。 – ddyer