我有一个包含 JScrollPane 的内容窗格,该 JScrollPane 包裹在一个不可编辑的 JTextArea 周围,我正在使用它(现在)简单地显示有关正在按下的键的信息(只是试图让这个 KeyListener 工作)。
The KeyListener is on the JTextArea and everything works fine when the frame is selected. 但是,即使选择了另一个窗口,我也希望注册按键。有什么办法可以做到这一点?
谢谢。
我有一个包含 JScrollPane 的内容窗格,该 JScrollPane 包裹在一个不可编辑的 JTextArea 周围,我正在使用它(现在)简单地显示有关正在按下的键的信息(只是试图让这个 KeyListener 工作)。
The KeyListener is on the JTextArea and everything works fine when the frame is selected. 但是,即使选择了另一个窗口,我也希望注册按键。有什么办法可以做到这一点?
谢谢。
我过去是这样做的,但我不记得具体是怎么做的。我认为它类似于:
KeyEventDispatcher dispatcher = new KeyEventDispatcher()
{
public boolean dispatchKeyEvent(KeyEvent e)
{
System.out.println(e.getKeyChar());
return false;
}
};
DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(dispatcher);
只需使用您的自定义代码修改 SysOut。如果你想阻止一个事件被分派,该方法应该返回 true 而不是 false。我还发现这个问题可能会解决您的问题。
如果您需要在进行侦听的组件没有焦点时侦听键,请考虑使用键绑定。另一方面,如果您试图在另一个应用程序有焦点时听键,那么您最好的选择是不要为此使用 Java,而是使用一种可以让您更接近操作系统的编程语言,例如C 或 C++。