6

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

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

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

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

4

6 回答 6

16

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

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

大多数人会因为这个选角而感到困难。

于 2013-06-16T08:01:46.880 回答
4

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

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

希望这段代码有所帮助。

于 2015-03-29T19:06:55.750 回答
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 keyJComboBoxin实现通知,必须从APIENTER key pressed

于 2012-12-27T15:30:37.087 回答
0

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

于 2013-02-14T01:17:30.933 回答
0

请检查事件ASCII码,ev.getkeycode()并检查它是数字还是字符。如果它既不是数字也不是字符,则什么也不做。如果这是您想要的,请执行此过程。

于 2016-09-18T06:47:43.067 回答
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.
   }
});
于 2019-12-19T09:04:40.383 回答