【问题标题】:add ListSelectionListener on JComboBox在 JComboBox 上添加 ListSelectionListener
【发布时间】:2011-04-09 11:35:27
【问题描述】:

我对 Java Swing 还是很陌生。而且我一直试图在JComboBox 实例上添加ListSelectionListener。似乎只有ListSelectionModel 接口有addListSelectionListener 方法。有点想不通...

为什么我要添加它是我想让程序做一些事情,即使组合框中的项目在选择后没有变化。

可能的答案 我只是想在组合框上附加一个 actionListener 不起作用。我认为这是openjdk的错误。我已经举报了here

提前致谢。

【问题讨论】:

    标签: java swing awt


    【解决方案1】:

    看看JComboBox#addItemListener

    JComboBox combo = createCombo();
    combo.addItemListener(new ItemListener()
    {
        @Override
        public void itemStateChanged(ItemEvent e)
        {
            if (e.getStateChange() == ItemEvent.SELECTED)
            {
                Object selectedItem = e.getItem();
                // Do something with the selected item...
            }
        }
    });
    

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

    【讨论】:

    • 即使再次选择了已经选择的同一个项目,是否会触发 ItemEvent?
    • 可能不是因为那时“什么都没有发生”并且不需要触发事件。在这种情况下,我也不认为 ListSelectionEvent 是从 JList 的 ListSelectionModel 中触发的。
    【解决方案2】:

    对于 JComboBox,您必须使用 ActionListener。

        JComboBox jComboBox = new JComboBox();
        jComboBox.addActionListener(new ActionListener() {
    
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("combobox event");
    
            }
        });
    

    AFAIK,每当用户为 JComboBox 进行选择时,都会引发 actionPerformed,即使它与已选择的项目相同。

    【讨论】:

    • 不,选择显示项目时没有任何反应(单击或输入“Enter”键)
    【解决方案3】:

    这取决于您的要求。 ActionEvent 仅在使用键盘时触发,当鼠标移到项目上时选择发生变化时不会触发。

    如果您想在项目选择发生变化时执行一些操作,即使鼠标移动了,那么是的,您可能需要访问 JList。您可以使用以下代码访问弹出窗口使用的 JList:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-25
        • 2015-01-23
        • 1970-01-01
        • 1970-01-01
        • 2012-02-14
        • 2014-05-17
        • 1970-01-01
        相关资源
        最近更新 更多