2015-12-22 51 views
1

如果我有- > actionPerformed?

ComboBox box = b; 
b.addActionListener(this); 

不应该期待this.actionPerformed(event)被称为 操作组合框的时候?

我有一个测试框架与几个组合框,它似乎正常运行 ,但没有actionPerformed被称为。也许框架 本身需要以某种方式武装?

+0

这应该工作,我猜你可能有多个组合,可能是指错误的'actionPerformed'方法。您也可以通过在Codename One的'EventDispatcher'中放置一个监听器来将调试过程关注到Codename One代码本身中。http://www.codenameone.com/how-do-i-debug-into-codename-one-source-modify -it-contribution-it-back.html –

+0

我使用旧的学校形式,这个类有一个actionperformed的方法。 – ddyer

回答

0

这里的正确答案。我使用com.codename1.ui.Dialog作为顶层窗口 。我切换到使用com.codename1.ui.Form 和现在的行动正在按预期发射。

由Dialog构造的环境中的东西(它扩展了Form) 正在干扰事件机制。也许通过设计。

+0

没有这样的事情。但是,对话框是一个单独的窗体,并且被阻止,因此绑定事件的代码可能已放置在显示之后。 –

+0

事件监听器是肯定安装的,但你的确是明显的区别是Dialog.show()阻止,但Form.show()不会。有线程环境的写作吗?好奇的事情(对我来说)是下拉菜单操作。我希望事件发布是由同一个线程完成的。 – ddyer

+0

它的'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 –

1

你的问题不是很清楚,你没有给它一个正确的标题。

如果你想的ActionListener添加到ComboBox,你这是怎么做到这一点:

ComboBox box = new ComboBox(); 
box.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent evt) { 
    } 
}); 
+0

这基本上就是我所做的,但操作执行的方法从未被调用,因为组合框被操纵。 – ddyer

1

根据我的理解,你只是想从一个类中创建一个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实例来处理多个事件。