[英]do something once the key is held and repeat when its released and repressed
我需要检查用户何时按下并释放它。 如果持有钥匙,我会做一次。
我用按键来获取我想要与之关联的按钮。 我还使用了一个信号量来克服这个问题,但它看起来很疯狂
我的代码:`
InputMap inputMap = jPanel1.getInputMap();
KeyStroke keyPressed = KeyStroke.getKeyStroke(KeyEvent.VK_1, 0, false);
KeyStroke keyReleased = KeyStroke.getKeyStroke(KeyEvent.VK_1, 0, true);
//------------------------------------------
jPanel1.getActionMap().put("_1000Press", _1000Press);
inputMap.put(keyPressed, "_1000Press");
jPanel1.getActionMap().put("_1000Release", _1000Release);
inputMap.put(keyReleased, "_1000Release");
public Action _1000Press = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if(!one){
// do some thing
one = true;
System.out.println(one);
}
}
};
public Action _1000Release = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
one = false;
System.out.println(one);
}
};
`
当我按下“1”键并按住它时,它会打印:false true false true false
提前致谢。
这对我来说很好
InputMap im = getInputMap();
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_1, 0, false), "Press");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_1, 0, true), "Release");
am.put("Press", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (!pressed) {
pressed = true;
System.out.println("press");
}
}
});
am.put("Release", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (pressed) {
pressed = false;
System.out.println("release");
}
}
});
只是为了确保我这样做
am.put("Release", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
pressed = false;
System.out.println("release");
}
});
它仍然有效
当我按下并按住1时打印的press
然后在我松开钥匙时打印release
。 这是我得到的唯一输出
更新完整代码
public class TestPane extends JPanel {
private boolean pressed;
public TestPane() {
InputMap im = getInputMap();
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_1, 0, false), "Press");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_1, 0, true), "Release");
am.put("Press", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (!pressed) {
pressed = true;
System.out.println("press");
}
}
});
am.put("Release", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (pressed) {
pressed = false;
System.out.println("release");
}
}
});
}
}
我不相信你能在Linux中实现你所需要的,因为操作系统不断向JVM发出按下/释放信号。
看到
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.