我在JFrame中添加了JComponent组件,为什么就监听不到键盘了,要如何监听到键盘?newContentPane.addKeyListener(new KeyAdapter() {
    
     public void keyPressed(KeyEvent e) {
if ((e.isControlDown() == true)
&& (e.getKeyCode() == KeyEvent.VK_F)) {
System.out.println("ctrl + F has pressed");
} else {
System.out.println("other key  pressed");
}
}
     public void keyTyped(KeyEvent e) {
            //键入某个键时调用此方法
            if (e.getKeyChar() == '') {
                System.exit(1);
            }
        }
});

解决方案 »

  1.   

    你让谁监听键盘事件,是jframe、JComponent还是两者都监听。newContentPane 这又是一个什么东西?啥也不说了,上代码:
    import java.awt.Dimension;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;import javax.swing.JComponent;
    import javax.swing.JFrame;public class Test2 extends JFrame { public static void main(String[] args) {
    KeyListener keyListener = new KeyListener() { @Override
    public void keyTyped(KeyEvent e) {
    if (e.getKeyChar() == 'e') {
    System.exit(1);
    }
    } @Override
    public void keyReleased(KeyEvent e) {
    // TODO Auto-generated method stub } @Override
    public void keyPressed(KeyEvent e) {
    if ((e.isControlDown() == true) && (e.getKeyCode() == KeyEvent.VK_F)) {
    System.out.println("ctrl + F has pressed");
    } else {
    System.out.println("other key  pressed");
    }
    }
    }; JComponent jcom = new JComponent() { };

    //这句可要 可不要。
    jcom.addKeyListener(keyListener);

    JFrame frame = new JFrame();
    frame.getContentPane().add(jcom);

    //关键是这句
    frame.addKeyListener(keyListener);

    frame.setSize(new Dimension(600, 400));
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }
    }