【问题标题】:Java swing combo box only calling listener onceJava swing 组合框只调用一次监听器
【发布时间】:2012-01-23 12:53:02
【问题描述】:

对 Java 和 Swing 非常陌生,我一直在玩 swing gui 应用程序。它为我的组合框生成了一些代码:

comboBox.addActionListener(EventHandler.create(ActionListener.class, TestController, "changeSomething"));

我也有这个:

import javax.swing.JComboBox;
import javax.swing.JOptionPane;

public class StudyPlanController {
    private JComboBox factors;

    public void changeSomething() {
        JOptionPane.showMessageDialog(null, "change!");
    }
}

我有 2 个问题。

  1. 当我更改组合框中的选定项目时,我收到消息“更改!”只有第一次更改。这是为什么呢?

  2. 在谷歌搜索解决方案时,用于设置侦听器的所有代码都与为我生成的代码不同。例如

    box.addItemListener(new ItemListener(){ 公共无效 itemStateChanged(ItemEvent e){ System.out.println(e.getItem() + " " + e.getStateChange() ); } });

我创建监听器的方式是否正确?为什么有两种方法可以做到这一点?

谢谢

【问题讨论】:

  • 这个代码是什么工具生成的?
  • @jackrabbit - mindsilver.com

标签: java swing


【解决方案1】:

对于JComboBox 更好地实现ItemListener,但是这个Listener 总是被调用两次SELECTEDDESELECTED,你可以检查如果事件是SELECTED/DESELECTED

   myComboBox.addItemListener(new ItemListener() {

        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                //some stuff
            }
        }
    });

您可以使用ActionListener,但我建议使用它来更改自己的JComboBox's 属性或方法,而不是从JComboBox 中移出到GUI 的某个位置

您可以使用EventHandler,但最好先学习基础知识

【讨论】:

    【解决方案2】:

    首先是关于 EventHandler 的回答。通常事件处理是按照@mKorbel 所说的那样完成的。对于许多事件侦听器类,有特定的方法会在事件上被调用。这可能导致许多匿名内部类。因此引入了EventHandler。使用反射更有效,并且创建的对象更少。见http://docs.oracle.com/javase/7/docs/api/java/beans/EventHandler.html

    其次,为什么会出错:我希望:

    comboBox.addItemListener(ItemListener.class, textController, "doSomething");
    

    正如@mKorbel 所说,因为有SELECTED 测试,这里最好不要使用EventHandler。

    【讨论】:

      【解决方案3】:

      除了给定的答案之外,我还遇到了 Netbeans 生成的代码的问题 - 它会隐藏起来,以防我们破坏它! 虽然 Builder 获得了快速的 GUI 设置 - 并且它做得非常出色,但我生成了错误的事件代码。 我现在习惯于不使用 Builder 添加事件,而是使用“自己编写的”方法来设置这些事件 - 特别是在这种情况下使用上面的优秀建议。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-07
        • 1970-01-01
        • 2021-01-07
        • 1970-01-01
        • 2012-12-27
        相关资源
        最近更新 更多