提问者:小点点

JavaEnter键的可编辑JCombobox Keylistener事件


我有可编辑的JCombobox,我为combobox编辑器组件添加了keylistener。当用户按回车键时,如果可编辑的combobox上没有文本,我需要使用JOptinoPane显示消息框。我在keyrelease事件中做了必要的代码,它按预期显示消息。

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

知道怎么解决吗?

请注意,我不能为此使用Action侦听器。


共3个答案

匿名用户

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

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);

大多数人觉得很难,因为这个铸造。

匿名用户

我们需要在组合框用于服务编辑的组件上添加一个键侦听器。

JTextComponent editor = (JTextComponent) urCombo.getEditor().getEditorComponent();
editor.addKeyListener(new KeyAdapter() {
   public void keyReleased(KeyEvent evt) {
      // your code
   }
});

希望这段代码有帮助。

匿名用户

Note that I can't use Action listener for this.

这不会让我有任何意义,然后使用ItemListener

Any idea how to solve this?

>

  • 永远不要将KeyListener用于Swing JComponents,请使用(注意我不能为此使用Action listener。)KeyBindings,

    注意ENTER键是在中为JComboBox实现的API默认情况下,必须从按下ENTER键覆盖此操作