如何在java

时间:2016-02-10 09:18:03

标签: java events

我想知道是否有可能在java中创建一个偶数,而不会不断地轮询我观察到的值的状态。

例如,我是否可以创建在用户按空格键时发生的事件,而不检查空格键是否被按下,这样只有当用户按下空格键时才会调用函数?

3 个答案:

答案 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编写,因此无需验证...不要忘记将键盘添加到相应的框架中...

(如果你正在听控制台输入让我知道 - 这个答案不适合当时)...