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:个人感觉,在以后的编程中遇到和需要自己编写观察者模式的时候还真不少,比如我们的多线程下载,多个界面需要知道进度条的状态,就适合用这种模式来处理。