【发布时间】:2014-11-30 22:58:25
【问题描述】:
我使用带有自定义标题栏和自定义大小调整器的未装饰 JFrame。一切正常,但是当我制作未装饰的 JFrame 时,我失去了对 Windows-Left/Right 键绑定的支持(似乎它是由 Windows 本机实现的)。我想为我的应用程序重新实现此功能。我的问题:我可以在按键侦听器中检测是否按下了 Windows 键,但我无法检测到另一个键(在我的情况下为左/右)是否与 Windows 键一起按下(InputEvent 中没有修饰符 WINDOWS_MASK_DOWN)。可能有人知道解决方法?
这是我的代码:
import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class HeadlessFrameTest {
public static void main(String[] args) {
final JFrame frm = new JFrame("Test");
final JTextField field = new JTextField();
frm.add(field, BorderLayout.NORTH);
field.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
System.out.println(e);
}
});
frm.setUndecorated(true);
frm.setSize(500, 550);
frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frm.setVisible(true);
}
}
【问题讨论】:
-
+1
(no modifier WINDOWS_MASK_DOWN in InputEvent).按下右/左键时(在 JDK7 中)甚至不会生成任何事件,尽管为 keyReleased 事件生成了一个事件。这告诉我 Windows 正在拦截该事件。奇怪的是,左右键功能不起作用,因为 Windows+Up 键确实最大化了窗口,尽管 Windows+Down 不会恢复窗口。所以肯定有矛盾。我不知道解决方案。 -
这方面有什么更新吗?我遇到了同样的问题,正在寻找解决方案。
标签: java swing keylistener