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

时间:2012-12-27 14:32:47

标签: java swing jcombobox keylistener enter

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

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

知道如何解决这个问题吗?

请注意,我无法使用Action侦听器。

6 个答案:

答案 0 :(得分: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);

大多数人都因为这次演员而感到困难。

答案 1 :(得分:2)

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

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

希望此代码有所帮助。

答案 2 :(得分:1)

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

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

Any idea how to solve this?
  • 永远不要将KeyListene r用于Swing JComponents,请使用(Note that I can't use Action listener for this。)KeyBindings代替,

  • 默认情况下,ENTER key JComboBox已为API实施通知ENTER key pressed,必须覆盖{{1}}

  • 中的此操作

答案 3 :(得分:0)

一种选择是用您自己的KeySelectionManager接口替换。您想要替换JComboBox.KeySelectionManager,因为它负责获取输入的char并返回应该选择的行号(作为int)。

答案 4 :(得分:0)

请按ev.getkeycode()检查事件ascii代码,并检查它是否为数字或字符。如果它既不是数字也不是字符什么都不做。 如果它是你想要的,那么就做这个过程。

答案 5 :(得分:0)

如果您使用的是Netbeans,则右键单击组合框并选择自定义代码。 添加以下代码行

JTextComponent editor = (JTextComponent) Code.getEditor().getEditorComponent();
editor.addKeyListener(new KeyAdapter() {
   public void keyReleased(KeyEvent evt) {
        if(evt.getKeyCode()==10)
            //do your coding here.
   }
});