Java中的鍵盤監聽事件KeyListener

zhou_lee發表於2015-08-04

Java中的鍵盤監聽事件KeyListener

轉載請註明出處:

http://blog.csdn.net/u012301841/article/details/47284917
最近在鞏固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:個人感覺,在以後的程式設計中遇到和需要自己編寫觀察者模式的時候還真不少,比如我們的多執行緒下載,多個介面需要知道進度條的狀態,就適合用這種模式來處理。

相關文章