【问题标题】:Detecting when user presses enter in Java检测用户何时在Java中按下回车
【发布时间】:2023-03-22 13:10:01
【问题描述】:

我有一个 JComboBox 的子类。我尝试使用以下代码添加关键侦听器。

addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent evt) { if(evt.getKeyCode() == KeyEvent.VK_ENTER) { System.out.println("Pressed"); } } });

但是,这不能正确检测用户何时按下键。它实际上根本没有被调用。我添加这个监听器错了吗?还有其他方法可以添加吗?

【问题讨论】:

  • 请给我们看完整的代码,我可以知道为什么需要在组合框中跟踪输入吗?
  • 该函数似乎没有问题,可能是您调用它的方式有问题。我们需要看更多的代码
  • @user489041,您不应该为此使用 KeyListener。

标签: java events swing jcombobox keylistener


【解决方案1】:

关键事件不是在盒子本身上触发的,而是在它的编辑器上触发的。您需要将 keyListener 添加到 JComboBox 的编辑器中,而不是直接添加框:

comboBox.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() 
    {
        public void keyPressed(KeyEvent evt)
        {
            if(evt.getKeyCode() == KeyEvent.VK_ENTER)
            {
                System.out.println("Pressed");
            }
        }
    });

编辑:固定方法调用。

【讨论】:

    【解决方案2】:

    这不是正确的方法。 JComboBox 的编辑器是 JTextField。如果要处理 Enter 键,则将 ActionListener 添加到文本字段。

    始终避免使用 KeyListener。

    编辑:

    comboBox.getEditorComponent().addActionListener( ... );
    

    【讨论】:

    • @user489041,你有没有在 JButton 中添加过 ActionListener?那么代码是完全一样的。如果您还没有阅读 Swing 教程中关于“如何编写动作监听器”(download.oracle.com/javase/tutorial/uiswing/TOC.html) 的部分。
    • 你需要comboBox.getEditor().addActionListener(...)
    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 2015-12-24
    • 2011-12-31
    • 2011-06-22
    • 2021-04-04
    相关资源
    最近更新 更多