【发布时间】:2015-08-16 12:18:28
【问题描述】:
在 java 键绑定中,在 windows 中,如何识别何时按下 CTRL 键本身,而不是何时按下 AltGr?
我的进程处理必须由CTRL键自己启动,我还需要知道CTRL键什么时候松开。
瑞士/德国法语用户出现问题:要键入“@”,他们必须同时按“AltGr”+“2”。 在这种情况下,windows 将 AltGr 转换为 ALT + CTRL 并且我的进程启动错误。
我指出我想使用键绑定。
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
public class MyCtrl extends JFrame {
void init() {
JPanel panel = new JPanel();
setContentPane(panel);
InputMap inputMap = panel.getInputMap();
ActionMap actionMap = panel.getActionMap();
/**
* action for CTRL
*/
KeyStroke controlKey = KeyStroke.getKeyStroke(KeyEvent.VK_CONTROL, InputEvent.CTRL_MASK);
inputMap.put(controlKey, "ctrl");
actionMap.put("ctrl", new CtrlAction());
/**
* action for release CTRL
*/
KeyStroke releaseControlKey = KeyStroke.getKeyStroke("released CONTROL");
inputMap.put(releaseControlKey, "release ctrl");
actionMap.put("release ctrl", new ReleaseCtrlAction());
}
public class CtrlAction extends AbstractAction {
@Override
public void actionPerformed(ActionEvent e) {
if(AltGr is pressed)
{// do nothing}
else
System.out.println("control");
}
}
public class ReleaseCtrlAction extends AbstractAction {
@Override
public void actionPerformed(ActionEvent e) {
if(AltGr is pressed)
{// do nothing}
else
System.out.println("release control");
}
}
/**
* main
*/
public static void main(String[] a) {
MyCtrl myProjet = new MyCtrl();
myProjet.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myProjet.setPreferredSize(new Dimension(200, 100));
myProjet.init();
myProjet.pack();
myProjet.setVisible(true);
}
}
【问题讨论】:
标签: java key-bindings ctrl