【发布时间】:2012-09-08 05:19:42
【问题描述】:
背景
我的窗口是 java.awt.Frame,Frame 内部是两个 Panels (java.awt.Panel)。我正在尝试让窗口处理我按下的按钮。
尝试 1 号
我尝试使用 KeyListener,使 Frame 实现 KeyListener。我将 KeyListener 添加到 Frame 中,但是当我按下键时 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
主要问题是我不知道第 09 行和第 10 行中的“组件”应该是什么,因为我的应用程序没有任何 JComponents。
我的问题
有没有办法在不使用摆动组件的情况下做到这一点?还是有其他处理按键的方法?
【问题讨论】:
-
我很好奇你为什么不使用 Swing。它是旧版应用吗?
-
我最终要让我的程序成为多线程的,而且我听说 Swing 不是线程安全的。
-
线程安全与GUI更新有关,并不是说不能使用线程。网络上有很多资源可供您阅读,以了解如何在使用 Swing 时处理线程。
-
尝试使用根窗格或内容窗格。请记住,子组件可能会在到达您之前消耗按键
-
@nobrainer 我会改用 JPanel。直接应用 KeyBindings 并使用它的 paintCompont 方法来绘制图形。您需要确保将面板设置为可聚焦
标签: java swing jframe key-bindings keylistener