下面是我写的一个对键盘的监听程序,程序本身应该是没有错的。
有的时候我测试的时候没有错误,正常的显示(按↑的时候控制台显示up,按↓的时候显示down)
可有的时候测试的时候却没有反应,这是什么原因?
而且现在发代码的时候测试,就失灵了。键盘监听未启作用。这是为什么?
package com.briup.test08;import java.awt.Container;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;import javax.swing.JButton;
import javax.swing.JFrame;import javax.swing.JPanel;public class D 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);
init();
}
private void init() {
// TODO Auto-generated method stub
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 D();
}
}

解决方案 »

  1.   

    GUI事件监听,有个很大的问题是“当前焦点控件”是谁?有时候焦点是落在 Button 或者 Input 上面的,那么在Frame上所注册的事件监听器,就不会被触发;因为当前处理控件不是Frame。按照这个原理,你再测试测试。
      

  2.   

    package com.diffmaker;
    import java.awt.Container;
    import java.awt.event.FocusEvent;
    import java.awt.event.FocusListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    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();
    }
    }