Ser*_*kyy 6 java swing keylistener
我使用带有自定义标题栏和自定义缩放器的未修饰的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);
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,我无法\xe2\x80\x99t在我的系统上正确地测试它,Windows+Left或者即使对于未修饰的帧也被Windows拦截和处理,但是为未使用的组合添加另一个案例Right +Windows证明A如果主机系统以下代码可以工作不消耗快捷键:
\n\n(更新:因为它似乎是Windows消耗的按键事件,所以可以捕获Windows+Left或的按键释放)Right
\n\nfinal JFrame frm = new JFrame("Test");\nfinal JTextField field = new JTextField();\nfrm.add(field, BorderLayout.NORTH);\nfrm.getToolkit().addAWTEventListener(new AWTEventListener() {\n boolean winDown;\n public void eventDispatched(AWTEvent event) {\n KeyEvent ev=(KeyEvent)event;\n final boolean pressed = ev.getID()==KeyEvent.KEY_PRESSED;\n if(ev.getKeyCode()==KeyEvent.VK_WINDOWS) winDown=pressed;\n else if(winDown) switch(ev.getKeyCode()) {\n case KeyEvent.VK_LEFT:\n System.out.println("windows + LEFT "+(pressed?"pressed":"released"));\n break;\n case KeyEvent.VK_RIGHT:\n System.out.println("windows + RIGHT "+(pressed?"pressed":"released"));\n break;\n case KeyEvent.VK_A:\n System.out.println("windows + A "+(pressed?"pressed":"released"));\n break;\n }\n }\n}, KeyEvent.KEY_EVENT_MASK);\nfrm.setUndecorated(true);\nfrm.setSize(500, 550);\nfrm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);\nfrm.setVisible(true);\nRun Code Online (Sandbox Code Playgroud)\n\n组件上的普通按键监听器似乎不起作用,因为Windows按下时组件会失去焦点。
\n| 归档时间: |
|
| 查看次数: |
265 次 |
| 最近记录: |