Java swing 组合框只调用一次监听器

标签 java swing

对 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(新的ItemListener(){ public void itemStateChanged(ItemEvent e){ System.out.println(e.getItem() + ""+ e.getStateChange() ); } });

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

谢谢

最佳答案

对于 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 的 属性或方法,而不是从 JComboBox 中删除,以在 GUI 的某个地方显示

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

关于Java swing 组合框只调用一次监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8560544/

相关文章:

java - 将数组中的元素以一定的间隔增加一定的量。 java

java - 无法使用 Java JNDI 上下文查找访问对象

java - 坚持设计

java - 我将如何向弹出菜单添加单选按钮?

java - 可调整大小的 Swing 布局,其中按钮根据可变尺寸排列

java - 尽管没有错误,NetBeans Java 项目仍不会显示 GUI 窗口

java - 带有 Autowired 语句的 NullPointerException

java - Mockito:如何部分使用 @InjectMocks-Annotation 进行 MockMvc 测试?

java - 将多行 JTextArea 写入 txt 文件

java - 单击按钮修改表