我正在编写一个屏幕捕获实用程序,我希望能够在截取屏幕截图时存储键盘和鼠标的当前状态。
对鼠标执行此操作很简单,因为使用指针信息类中描述的方式相关问题为您提供当前鼠标位置的屏幕坐标以及单击信息(如果需要)。然而,我还没有找到类似的键盘类;所有与键盘相关的类似乎都是特定于焦点的。
那么,Java中有没有办法获取当前键盘状态呢?
附:请记住,我正在寻找一个函数来调用以检索有关按下哪些键的信息,not此类抑郁事件的听众。
你可以做的就是实施KeyListener
界面并为您感兴趣的所有按键提供状态。
例如,如果您有兴趣检查屏幕截图上是否按下了箭头键,您可以实现此KeyListener
接口和覆盖keyPressed()
and keyReleased()
方法并设置您感兴趣的那些键的状态keyPressed
or keyReleased
。取决于事件。这样,当屏幕截图发生时,您可以读取这些按键的状态
如果您需要此解决方案是全局的,无论应用程序焦点如何,您可以用 C 编写一个小钩子,可以与 Java 本机接口集成以侦听关键事件。 Java 不允许您在未将侦听器附加到组件并且该组件具有焦点的情况下侦听关键事件。看一下JNativeHook.
如果您只是在应用程序具有焦点但在每个组件上时需要它,您可以不优雅地将侦听器附加到所有组件,或者您可以编写自己的自定义 KeyEventDispatcher 并将其注册到 KeyBoardFocusManager 上。这样,只要您的应用程序具有焦点,无论具有特定焦点的组件如何,您都可以捕获所有键盘事件。看:
public class YourFrame extends JFrame {
public YourFrame() {
// Finish all your layout and add your components
//
// Get the KeyboardFocusManager and register your custom dispatcher
KeyboardFocusManager m = KeyboardFocusManager.getCurrentKeyboardFocusManager();
m.addKeyEventDispatcher(new YourDispatcher());
}
private class YourDispatcher implements KeyEventDispatcher {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getID() == KeyEvent.KEY_TYPED) {
// Do something to change the state of the key
} else if (e.getID() == KeyEvent.KEY_PRESSED) {
// Do something else
}
return false;
}
}
public static void main(String[] args) {
YourFrame yF = new YourFrame();
yF.pack();
yF.setVisible(true);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)