public class Test extends JPanel{
private JFrame frame;
private Container contentPane;
private JButton button;
public D(){
frame=new JFrame();
frame.setSize(300,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane=frame.getContentPane();
frame.setVisible(true);
contentPane.setLayout(null);
button=new JButton("按钮");
button.setBounds(50, 50, 80, 30);
contentPane.add(button);
frame.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
System.out.println("实现监听");
 if(e.getKeyCode()==e.VK_UP){
    System.out.println("up");
 } if(e.getKeyCode()==e.VK_DOWN){
    System.out.println("down");
 }
}
});
}public static void main(String[] args) {
new Test();
}

有的时候可以,有的时候就监听不到键盘了。。不知道为什么求助。。

解决方案 »

  1.   

    这是一个焦点转移的问题你那个frame失去了焦点导致的
      

  2.   

    我最开始的时候也犯过这样的错误你看看这段代码吧。。
    和你的基本一样,添加焦点请求就好了。public class D extends JPanel{
        private static final long serialVersionUID = 453890560369815259L;
        private JFrame frame;
        private Container contentPane;
        private JButton button;
        public D(){
            frame=new JFrame();
            contentPane=frame.getContentPane();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(300, 300);
            frame.setVisible(true);
            init();
        }
        private void init(){
            contentPane.setLayout(null);
            button=new JButton("按钮");
            button.setBounds(50, 50, 80, 30);
            contentPane.add(button);
            frame.addKeyListener(new KeyListener(){
                @Override
                public void keyPressed(KeyEvent e) {
                    int keyCode=e.getKeyCode();
                    if(keyCode==KeyEvent.VK_UP){
                        System.out.println("up");
                    }else if(keyCode==KeyEvent.VK_DOWN){
                        System.out.println("down");
                    }
                }
                @Override
                public void keyReleased(KeyEvent e) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void keyTyped(KeyEvent e) {
                    // TODO Auto-generated method stub
                }
            });
            frame.addFocusListener(new FocusListener(){
                @Override
                public void focusGained(FocusEvent arg0) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void focusLost(FocusEvent arg0) {
                    // TODO Auto-generated method stub
                    frame.requestFocus();
                }           
            });
            frame.requestFocus();
        }
        public static void main(String[] args) {
            new D();
        }
    }
      

  3.   

    我最开始的时候也犯过这样的错误你看看这段代码吧。。
    和你的基本一样,添加焦点请求就好了。public class D extends JPanel{
        private static final long serialVersionUID = 453890560369815259L;
        private JFrame frame;
        private Container contentPane;
        private JButton button;
        public D(){
            frame=new JFrame();
            contentPane=frame.getContentPane();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(300, 300);
            frame.setVisible(true);
            init();
        }
        private void init(){
            contentPane.setLayout(null);
            button=new JButton("按钮");
            button.setBounds(50, 50, 80, 30);
            contentPane.add(button);
            frame.addKeyListener(new KeyListener(){
                @Override
                public void keyPressed(KeyEvent e) {
                    int keyCode=e.getKeyCode();
                    if(keyCode==KeyEvent.VK_UP){
                        System.out.println("up");
                    }else if(keyCode==KeyEvent.VK_DOWN){
                        System.out.println("down");
                    }
                }
                @Override
                public void keyReleased(KeyEvent e) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void keyTyped(KeyEvent e) {
                    // TODO Auto-generated method stub
                }
            });
            frame.addFocusListener(new FocusListener(){
                @Override
                public void focusGained(FocusEvent arg0) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void focusLost(FocusEvent arg0) {
                    // TODO Auto-generated method stub
                    frame.requestFocus();
                }           
            });
            frame.requestFocus();
        }
        public static void main(String[] args) {
            new D();
        }
    }
    谢谢了,有问题 还得请教你.
      

  4.   

    我最开始的时候也犯过这样的错误你看看这段代码吧。。
    和你的基本一样,添加焦点请求就好了。public class D extends JPanel{
        private static final long serialVersionUID = 453890560369815259L;
        private JFrame frame;
        private Container contentPane;
        private JButton button;
        public D(){
            frame=new JFrame();
            contentPane=frame.getContentPane();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(300, 300);
            frame.setVisible(true);
            init();
        }
        private void init(){
            contentPane.setLayout(null);
            button=new JButton("按钮");
            button.setBounds(50, 50, 80, 30);
            contentPane.add(button);
            frame.addKeyListener(new KeyListener(){
                @Override
                public void keyPressed(KeyEvent e) {
                    int keyCode=e.getKeyCode();
                    if(keyCode==KeyEvent.VK_UP){
                        System.out.println("up");
                    }else if(keyCode==KeyEvent.VK_DOWN){
                        System.out.println("down");
                    }
                }
                @Override
                public void keyReleased(KeyEvent e) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void keyTyped(KeyEvent e) {
                    // TODO Auto-generated method stub
                }
            });
            frame.addFocusListener(new FocusListener(){
                @Override
                public void focusGained(FocusEvent arg0) {
                    // TODO Auto-generated method stub
                }
                @Override
                public void focusLost(FocusEvent arg0) {
                    // TODO Auto-generated method stub
                    frame.requestFocus();
                }           
            });
            frame.requestFocus();
        }
        public static void main(String[] args) {
            new D();
        }
    }
    谢谢了,有问题 还得请教你.
    亲,如果没问题就结贴吧