我想知道是否有可能在java中创建一个偶数,而不会不断地轮询我观察到的值的状态。
例如,我是否可以创建在用户按空格键时发生的事件,而不检查空格键是否被按下,这样只有当用户按下空格键时才会调用函数?
答案 0 :(得分:0)
使用Observer模式,Java已经实现。检查Java文档或here。
答案 1 :(得分:0)
布尔标志
boolean flag = false;
这是一个JTextField。
JTextField tf = new JTextField();
并为其添加一个Key Listener,以便侦听其上的关键事件。
tf.addKeyListener(kl);
kl是您之前创建的KeyListener的对象。
KeyListener kl = new KeyListener(){
...
onKeyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_SPACE) {
System.out.println("space hit");
flag = !flag; //I think this is what you want
}
}
...
};
这不是一个有效的代码。只是一个让你更好地理解听众的例子。
答案 2 :(得分:0)
由于默认操作系统仅提供按键事件驱动的支持,因此您必须编写自己的键盘驱动程序,以便提供轮询键状态的方法...
(请记住,您的键盘上没有硬件针脚,因为每个按键都可以像您在微控制器上那样进行检查,键盘本身会处理状态并将事件发送到操作系统,它本身就称为“中断”。这些中断由驱动程序处理,即键盘驱动程序)
Writing a keyboard device driver
您可以更轻松地编写自己的键盘类来映射所有键事件,并且可以进行轮询
class KeyboardState extends KeyAdapter{
boolean[] keyState = new boolean[256];
@Override
public void keyPressed (KeyEvent ke){
keyState[ke.keyCode] = true;
}
@Override
public void keyReleased(KeyEvent ke){
keyState[ke.keyCode] = false;
}
public boolean isKeyDown(int keyCode){
return keyState[keyCode];
}
}
此代码已直接用SO编写,因此无需验证...不要忘记将键盘添加到相应的框架中...
(如果你正在听控制台输入让我知道 - 这个答案不适合当时)...