【问题标题】:Java KeyListener - How to detect if any key is pressed?Java KeyListener - 如何检测是否按下了任何键?
【发布时间】:2014-02-19 19:54:23
【问题描述】:

我已将 KeyListener 添加到 TextArea 并希望检查是否按下了 any 键。 我有以下内容,但检查所有字母和数字太笨拙了:

public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_A || e.getKeyCode() == KeyEvent.VK_B || 
e.getKeyCode() == KeyEvent.VK_C ||e.getKeyCode() == KeyEvent.VK_D etc...){  

    }   
}

【问题讨论】:

  • 当心,文本组件可能会消耗鼠标事件,这使得它不可靠,通常您会使用 DocumentListener 在文本组件更改时收到通知,如果您想过滤已更改的内容,则使用 DocumentFilter输入
  • 啊,谢谢。我以前从未使用过 DocumentListener,我可能会改用它..
  • 我赞同@MadProgrammer 的建议。在文本组件上使用 KeyListener 很危险。

标签: java key keyevent any pressed


【解决方案1】:

您不需要任何 if 语句。每当按下某个键时,keyPressed 方法就会被触发,因此您会自动进入该方法。

【讨论】:

  • 我相信他对某些特定的按键事件要执行一些操作。
  • 不,实际上该操作并不特定于键。非常感谢,四面楚歌。
  • @EfeEsenwa 没问题。如果我的回答有帮助,您应该接受它,以便其他人可以看到它。你可以通过点击复选框来做到这一点。
  • 最好不要推荐在 JTextArea 或任何文本组件上使用 KeyListeners。这是你给出的危险建议。
  • 这可能无法在所有平台上可靠地工作,甚至在不同版本的 JVM 下 - 只是说......
【解决方案2】:

我认为您可以使用KeyEvent.getKeyChar() or KeyEvent.getKeyCode() 方法,该方法将返回字符值/按键代码。

对于字母数字 A-Z、a-z、0-9;

int key= KeyEvent.getKeyCode();

if((((key>=65)&&(key<=90))||((key>=97)&&(key<=122))||((key>=48)&&(key<=57)))
{
//Do action
}

【讨论】:

    【解决方案3】:

    创建相应关键事件的列表并检查列表是否包含这些事件。

    List keyEvents = new ArrayList<KeyEvent>();
    keyEvents.add(KeyEvent.VK_A);
    keyEvents.add(KeyEvent.VK_B);
    keyEvents.add(KeyEvent.VK_C);
    keyEvents.add(KeyEvent.VK_D);
    
    public void keyPressed(KeyEvent e) {
    if(keyEvents.contains(e.getKeyCode())){  
    
        }   
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 2010-12-17
      • 2015-10-18
      • 2014-07-13
      • 2016-12-29
      相关资源
      最近更新 更多