输入密钥的Java可编辑JCombobox Keylistener事件

Joe*_*Joe 5 java swing enter keylistener jcombobox

我有可编辑的JCombobox,我为组合框编辑器组件添加了keylistener.当用户按下"Enter键"并且可编辑组合框上没有文本时,我需要使用JOptinoPane显示消息框.我已经在keyrelease事件中完成了必要的代码,它会按预期显示消息.

问题是,当我们收到消息框并且如果用户在JOptionPane的"确定"按钮上按回车键,组合框编辑器keyevent再次触发.因此,当用户在消息框上按Enter键时,JoptionPane会持续显示.

不知道怎么解决这个问题?

请注意,我不能使用Action侦听器.

Cha*_*ara 12

请检查此代码是否对您有所帮助!

JFrame frame = new JFrame("Welcome!!");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JComboBox cmb = new JComboBox();
cmb.setEditable(true);
cmb.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {

    @Override
    public void keyReleased(KeyEvent event) {
        if (event.getKeyChar() == KeyEvent.VK_ENTER) {
            if (((JTextComponent) ((JComboBox) ((Component) event
                    .getSource()).getParent()).getEditor()
                    .getEditorComponent()).getText().isEmpty())
                System.out.println("please dont make me blank");
        }
    }
});
frame.add(cmb);

frame.setLocationRelativeTo(null);
frame.setSize(300, 50);
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

由于这种铸造,大多数人发现很难.

  • 中间有几个变量会更容易理解。尤其是所有的铸造。 (2认同)

mKo*_*bel 1

Note that I can't use Action listener for this.
Run Code Online (Sandbox Code Playgroud)

这对我来说没有任何意义,然后使用 ItemListener

Any idea how to solve this?
Run Code Online (Sandbox Code Playgroud)
  • 永远不要使用KeyListene r Swing JComponents,而是使用 ( Note that I can't use Action listener for this.) KeyBindings

  • 默认情况下,通知ENTER key是为JComboBoxin实现API的,必须覆盖此操作ENTER key pressed