Java 在Swing中,输入Key not working从组合框中选择元素

Java 在Swing中,输入Key not working从组合框中选择元素,java,swing,jcombobox,itemlistener,Java,Swing,Jcombobox,Itemlistener,我已将ItemListener添加到JComboBox。ItemListener能够检测我使用鼠标单击或空格键所做的任何选择。但它无法识别回车键。换句话说,如果我使用箭头键滚动ComboBox中的条目,然后按Enter键,则不会调用itemStateChanged方法。你有什么想法吗? 要监听来自MouseEvent的更改,是否存在itemstener,触发已选择/未选择的 要收听ENTER键,是否有ActionListener 其余的关键事件可以从JComboBox的JList中确定 比如说

我已将ItemListener添加到JComboBox。ItemListener能够检测我使用鼠标单击或空格键所做的任何选择。但它无法识别回车键。换句话说,如果我使用箭头键滚动ComboBox中的条目,然后按Enter键,则不会调用itemStateChanged方法。你有什么想法吗?

  • 要监听来自
    MouseEvent
    的更改,是否存在
    itemstener
    ,触发
    已选择/未选择的

  • 要收听
    ENTER键
    ,是否有
    ActionListener

  • 其余的关键事件可以从JComboBox的JList中确定

比如说

import java.awt.Component;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.basic.BasicComboBoxRenderer;

public class ComboBoxHoverOver {

    private JComboBox combo = new JComboBox();

    public ComboBoxHoverOver() {
        combo.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXX");
        combo.setRenderer(new ComboToolTipRenderer(combo));
        combo.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                System.out.println(combo.getSelectedItem().toString());
            }
        });
        combo.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(combo.getSelectedItem().toString());
            }
        });
        combo.addItem("");
        combo.addItem("Long text 4");
        combo.addItem("Long text 3");
        combo.addItem("Long text 2");
        combo.addItem("Long text 1");
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(combo);
        f.pack();
        f.setVisible(true);
    }

    private class ComboToolTipRenderer extends BasicComboBoxRenderer {

        private static final long serialVersionUID = 1L;
        private JComboBox combo;
        private JList comboList;

        ComboToolTipRenderer(JComboBox combo) {
            this.combo = combo;
        }

        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            if (comboList == null) {
                comboList = list;
                KeyAdapter listener = new KeyAdapter() {

                    @Override
                    public void keyReleased(KeyEvent e) {
                        if (e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_UP) {
                            int x = 5;
                            int y = comboList.indexToLocation(comboList.getSelectedIndex()).y;
                            System.out.println(comboList.getSelectedIndex());
                        }
                    }
                };
                combo.addKeyListener(listener);
                combo.getEditor().getEditorComponent().addKeyListener(listener);
            }
            if (isSelected) {
                System.out.println(value.toString());
            }
            return this;
        }
    }

    public static void main(String[] args) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                ComboBoxHoverOver comboBoxHoverOver = new ComboBoxHoverOver();
            }
        });
    }
}

你能分享你试过的代码吗?这将有助于调试。-1用于keyListener和random(阅读:与问题无关)代码。记住:答案中的代码应该是SSCCEs,问题中的代码也应该是:-)