java - 如何为 java.awt.Frame 进行键绑定(bind)?

标签 java swing jframe key-bindings keylistener

背景

我的窗口是一个java.awt.Frame,Frame里面有两个面板(java.awt.Panel)。我正在尝试让窗口处理我按下的按钮。

尝试编号 1

我尝试使用 KeyListener,让 Frame 实现 KeyListener。我将 KeyListener 添加到框架中,但是当我按下按键时,KeyListener 函数没有执行任何操作。 (我尝试使用 System.out.println() 进行打印。)

尝试数字 2

我尝试按照本教程进行操作:http://tips4java.wordpress.com/2008/10/10/key-bindings/ .这是我尝试按下空格键的尝试:

public void registerActions(){                                  //01
  Action myAction = new AbstractAction(){                       //02
    @Override                                                   //03
    public void actionPerformed(ActionEvent e) {                //04
      System.out.println("GREAT SUCCESS!");                     //05
    }                                                           //06
  };                                                            //07
  KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0); //08
  component.getInputMap().put(key, "myAction");                 //09
  component.getActionMap().put("myAction", myAction);           //10
}                                                               //11

主要问题是我不知道第 9 行和第 10 行中的“组件”应该是什么,因为我的应用程序没有任何 JComponents。

我的问题

有没有不使用 swing 组件就可以做到这一点的方法?还是有另一种处理按键的方法?

最佳答案

我发现我可以使用 AWTEventListener 来做到这一点。

public class MyFrame extends Frame implements AWTEventListener {

  ...

  public MyFrame(String title){
    super(title);
    ...
    this.getToolkit().addAWTEventListener(this, AWTEvent.KEY_EVENT_MASK);
  }

  @Override
  public void eventDispatched(AWTEvent event) {
    if(event instanceof KeyEvent){
      KeyEvent key = (KeyEvent)event;
      if(key.getID()==KeyEvent.KEY_PRESSED){ //Handle key presses
        System.out.println(key.getKeyChar());
        //TODO: do something with the key press
        key.consume();
      }
    }
  }
}

关于java - 如何为 java.awt.Frame 进行键绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12434740/

相关文章:

java - Java 中 CardLayout 与 GridLayout 的结合

java - 从结果中消除零 (Java)

java - 如何将 JPanel 添加到自动生成的 netbeans JFrame 中?

java - JFrame 显示为空

java - 无法呈现不是字符串的属性,toString 返回 : null ERROR in SPRING MVC

java - 如何将 'xls' 文件中的 2 行标题转换为单行标题?

java - 将数据转换为声音并返回

java - 从 JDialog 返回值; dispose(), setVisible(false) - 例子

java - 从另一个类在 JTextArea 中写入一行

java - JFrame 在 while 循环期间卡住