Java中的键盘监听事件KeyListener

最近在巩固java基础,发现java的事件机制设计的很好,一个事件源发出事件的消息,只要其他地方注册监听了这个事件源,就可以得到此事件源发出的消息,从而做响应的改变。
后面去深入了解一下,果然为观察者模式。官方说法为采取“委派事件模型”,即事件源为被观察者,监听器为观察者,一个事件源可以有N个观察者。
本意是要说一下键盘监听事件的,但是java所有的事件机制都一样,所以只要了解了观察者模式,这个也很容易了解的

class MyPanel1 extends JPanel implements KeyListener{

    int x = 10;
    int y = 10;

    public MyPanel1() {
        super();
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.red);
        g.fillOval(x, y, 20, 20);
        System.out.println("paint()");
    }

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyPressed(KeyEvent e) {
        if ( e.getKeyCode()==KeyEvent.VK_DOWN ){
            y = y+10;
        } else if (e.getKeyCode()==KeyEvent.VK_UP){
            y--;
        } else if (e.getKeyCode()==KeyEvent.VK_RIGHT){
            x = x+10;
        } else if (e.getKeyCode()==KeyEvent.VK_LEFT){
            x--;
        } else {

        }
        this.repaint();
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

}

MyPanel1 实现了KeyListener这个接口,keyPressed()这个方法是当你按下键盘的某个键松开后就会被调用,根据keyCode()找到所对应的那个键,在执行操作。

public class Demo9_2 extends JFrame{

    private MyPanel1 myPanle;

    public static void main(String[] args) {
        Demo9_2 demo9_2 = new Demo9_2();
    }

    public Demo9_2(){
        myPanle = new MyPanel1();

        this.add(myPanle);

        this.addKeyListener(myPanle);

        this.setSize(400, 300);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setVisible(true);
    }


}

this.addKeyListener(myPanle) 就是注册事件,即为事件源分发事件,所以只要键盘有所操作,就会调用KeyListener实现类里面相应的方法。
PS:个人感觉,在以后的编程中遇到和需要自己编写观察者模式的时候还真不少,比如我们的多线程下载,多个界面需要知道进度条的状态,就适合用这种模式来处理。

你可能感兴趣的:(Java,SE)