Java 在JComboBox上添加ListSelectionListener

Java 在JComboBox上添加ListSelectionListener,java,swing,awt,Java,Swing,Awt,我对Java Swing还很陌生。我一直在尝试在JComboBox实例上添加ListSelectionListener。似乎只有ListSelectionModel接口具有addListSelectionListener方法。我有点搞不懂 我之所以要添加它,是因为我想让程序做一些事情,即使组合框中的项目在选择后不会更改 潜在答案 我只是想在combobox上附加一个actionListener,但它不起作用。我认为这是openjdk的错误。我已经报告了 提前感谢。对于JComboBox,您必须使

我对Java Swing还很陌生。我一直在尝试在JComboBox实例上添加ListSelectionListener。似乎只有ListSelectionModel接口具有addListSelectionListener方法。我有点搞不懂

我之所以要添加它,是因为我想让程序做一些事情,即使组合框中的项目在选择后不会更改

潜在答案 我只是想在combobox上附加一个actionListener,但它不起作用。我认为这是openjdk的错误。我已经报告了


提前感谢。

对于JComboBox,您必须使用ActionListener

    JComboBox jComboBox = new JComboBox();
    jComboBox.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("combobox event");

        }
    });

好的,每当用户选择JComboBox时,即使它是已选择的同一项,也会引发actionPerformed。对于JComboBox,您必须使用ActionListener

    JComboBox jComboBox = new JComboBox();
    jComboBox.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("combobox event");

        }
    });

好的,每当用户选择JComboBox时,都会引发actionPerformed,即使它是已选择的同一项。

这取决于您的需求。ActionEvent仅在使用键盘时触发,而不是在鼠标移到项目上时更改选择时触发

如果要在项目选择更改时执行某些操作(即使移动鼠标),则可能需要访问JList。您可以使用以下代码访问弹出窗口使用的JList:

JComboBox comboBox = new JComboBox(...);
BasicComboPopup popup = (BasicComboPopup)comboBox.getAccessibleContext().getAccessibleChild(0);
JList list = popup.getList();
list.addListSelectionListener(...);

这取决于你的要求。ActionEvent仅在使用键盘时触发,而不是在鼠标移到项目上时更改选择时触发

如果要在项目选择更改时执行某些操作(即使移动鼠标),则可能需要访问JList。您可以使用以下代码访问弹出窗口使用的JList:

JComboBox comboBox = new JComboBox(...);
BasicComboPopup popup = (BasicComboPopup)comboBox.getAccessibleContext().getAccessibleChild(0);
JList list = popup.getList();
list.addListSelectionListener(...);
看看:

鼠标和键盘交互都会触发此事件。

请查看:


鼠标和键盘交互都会触发此事件。

使用PopupMenuListener。当弹出菜单关闭时,获取所选索引并进行处理。

使用弹出菜单侦听器。当弹出菜单关闭时,获取所选索引并进行处理。

否,当单击或输入enter键no选择显示项目时,不会发生任何事情,如果单击或输入enter键后选择显示的项目,则不会发生任何情况即使再次选择了已选择的相同项目,也不会触发ItemEvent?可能不是因为没有发生任何事情,也不需要触发事件。我认为在这种情况下,ListSelectionEvent也不会从JList的ListSelectionModel触发。即使再次选择了已选择的相同项目,ItemEvent是否也会被触发?可能不是因为没有发生任何事情,也不需要触发事件。我认为在这种情况下,ListSelectionEvent也不会从JList的ListSelectionModel中触发。