我写了如下程序:
/**
*
*/
package netTest;import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* @author bluestone
*
*/
public class Test1 extends JFrame {
JButton b;
JLabel l;
public Test1(){
JButton b = new JButton("test");
JLabel l = new JLabel("nothing");
JPanel p = new JPanel();
p.add(b);
getContentPane().setLayout(new GridLayout(1,2));
getContentPane().add(p);
getContentPane().add(l);
//注释1 addKeyListener(new MyListener());
l.addKeyListener(new MyListener());
p.addKeyListener(new MyListener());
b.addKeyListener(new MyListener());
} /**
* @param args
*/
public static void main(String[] args) {
Test1 t = new Test1();
t.preferredSize();
t.show();
// TODO Auto-generated method stub }
/*
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
} public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
// l.setText(""+e.getKeyChar());
// TODO Auto-generated method stub
} public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
*/
class MyListener implements KeyListener{ public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
} public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
// TODO Auto-generated method stub
} public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}
}
现在可以运行,也能够响应键盘,但是当我把注释1加上,而去掉其后的三个组件的addkeylistener之后,这个程序就无法响应键盘。但是事实上我只是要其中的一个组件(或者是整个Frame)响应键盘就可以了,其他组件是不必要的,比如说让一个按钮响应键盘就是没有必要的?但是为什么必须全都注册了keylistener,整个程序才能响应键盘呢?这个实在是太奇怪了!
/**
*
*/
package netTest;import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* @author bluestone
*
*/
public class Test1 extends JFrame {
JButton b;
JLabel l;
public Test1(){
JButton b = new JButton("test");
JLabel l = new JLabel("nothing");
JPanel p = new JPanel();
p.add(b);
getContentPane().setLayout(new GridLayout(1,2));
getContentPane().add(p);
getContentPane().add(l);
//注释1 addKeyListener(new MyListener());
l.addKeyListener(new MyListener());
p.addKeyListener(new MyListener());
b.addKeyListener(new MyListener());
} /**
* @param args
*/
public static void main(String[] args) {
Test1 t = new Test1();
t.preferredSize();
t.show();
// TODO Auto-generated method stub }
/*
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
} public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
// l.setText(""+e.getKeyChar());
// TODO Auto-generated method stub
} public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
*/
class MyListener implements KeyListener{ public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
} public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
// TODO Auto-generated method stub
} public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}
}
现在可以运行,也能够响应键盘,但是当我把注释1加上,而去掉其后的三个组件的addkeylistener之后,这个程序就无法响应键盘。但是事实上我只是要其中的一个组件(或者是整个Frame)响应键盘就可以了,其他组件是不必要的,比如说让一个按钮响应键盘就是没有必要的?但是为什么必须全都注册了keylistener,整个程序才能响应键盘呢?这个实在是太奇怪了!
所以都需要添加KeyListener