我想知道是否有任何方法可以确定是否在不使用InputEvent的情况下按下任何键或鼠标按钮。
例如:我的应用程序没有焦点但是当它获得焦点时我想知道是否按下了Ctrl键。这适用于大多数条件,但如果通过点击标题栏获得焦点则不会(这正是我正在寻找的)。
或者:我开始拖动一个窗口,我想知道在此拖动过程中是否按下或释放了Ctrl键。
我已经尝试过按键击键并使用AWTEventListener,但这没有用,因为没有关于按下键的信息。
有没有办法从Swing中获取按键? 就我搜索而言,我认为没有,因为修改器直接从OS生成的事件(例如XWindow中的getModifiers())收集在工具箱中,但也许我错了。
有这样的方式:GlobalKeyListener但这很复杂,而且依赖于操作系统。
答案 0 :(得分:1)
标题栏不是Swing组件,因此在使用Swing侦听器时无法接收事件。
如果你想监听事件,那么你需要使用带有Swing装饰的JFrame:
JFrame frame = new JFrame();
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
frame.getRootPane().addMouseListener(...);
答案 1 :(得分:0)
如何监听密钥并设置一些布尔变量。然后,当您的应用程序获得焦点时,您只需检查布尔值是否已设置。
例如
private boolean isCtrlDown;
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_CONTROL) {
isCtrlDown = true;
}
}
public void keyReleased(KeyEvent e) {
if(e.getKeycode() == KeyEvent.VK_CONTROL) {
isCtrlDown = false;
}
}
public void focusGained(FocusEvent e) {
if(isCtrlDown) {
// Do what you wanted to do
}
}
答案 2 :(得分:0)
我找到的唯一实际可能性是使用https://code.google.com/p/jnativehook/
这会使用JNI添加本机侦听器。