package ceshi;
import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class Test extends JFrame{
public JButton jButton = new JButton("按钮");

public Test() {
init();
}

public void init() {
//敲击键盘,在控制台输出信息
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
}
});
//按下按钮,在控制台输出信息
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("接收到按钮事件...");
}
});
setLayout(null);
jButton.setBounds(100,100,60,30);
    add(jButton);

setVisible(true);
setResizable(true);
setBounds(400,400,400,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("测试");
}

public static void main(String[] args) {
Test test = new Test();
}
}如以上代码,给按钮注册了事件,也注册了键盘事件。
但是,点击按钮控制台会输出信息,敲击键盘则毫无反应。
如果把add(jButton);注释掉得话,就可以接收到键盘事件了。
这是为什么啊?!

解决方案 »

  1.   

     public void keyPressed(KeyEvent e) {
                    System.out.println(e.getKeyChar());
                }
    你这个没有说监听那个按键呀???是把
      

  2.   


     this.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent e) {
                    System.out.println(e.getKeyChar());
                }
            });后面加上一行this.setFocusable(true);
      

  3.   

    http://zhidao.baidu.com/question/248969990.html
      

  4.   


    宝马哥这是个方法,但是一旦button获得焦点后,frame又无法得到焦点从而响应键盘事件了。不如,jbutton.setFocusable(false);
    这样按钮也能点,frame也能响应键盘。应该有更好的方法,等待牛人。
      

  5.   

    恩,这个说的对,你复制下面的代码应该可以了吧import java.awt.*;
    import java.awt.event.*;import javax.swing.*;public class Test extends JFrame{
        public JButton jButton = new JButton("按钮");
        
        public Test() {
            init();
        }
        
        public void init() {
            //敲击键盘,在控制台输出信息
            this.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent e) {
                    System.out.println(e.getKeyChar());
                }
            });
            //this.setFocusable(true);
            //按下按钮,在控制台输出信息
            jButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.out.println("接收到按钮事件...");
                }
            });
            setLayout(null);
            jButton.setBounds(100,100,60,30);
            add(jButton);
            jButton.setFocusable(false);
            
            setVisible(true);
            setResizable(true);
            setBounds(400,400,400,200);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setTitle("测试");
            
        }
        
        public static void main(String[] args) {
            Test test = new Test();
        }
    }
      

  6.   

    也试了requestFocus();好像也不行啊。
    谁解决了,把代码发上来好吗?谢谢了啊。
      

  7.   

    button.setMnemonic('A');  // 有焦点时,按下 Alt + A