为何" KeyPressed"在java中不起作用?

时间:2014-04-16 18:49:24

标签: java

我想如果我在java中按'n'char打印一些东西,我将动作给keylistener但是我不知道它为什么不起作用?

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Test extends JPanel implements KeyListener {


    public Test() {

           super();
           this.addKeyListener(this);
    }
 //*************key*********************************
  public void keyTyped(KeyEvent e) {
     }
  //*************key*********************************************************************
     public void keyPressed(KeyEvent e) {
         if(e.getKeyChar()=='n'){
             System.out.print("hhhhhh");

             }
    }
 //*************key**********************************************************************
     public void keyReleased(KeyEvent e) {
    }
//**************************************************

   public static void main(String[] args) {
           JFrame frame = new JFrame("java lover");
          Test panel=new Test();
          frame.add(panel);
               frame.setSize(600, 600);
               frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   }
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

并非Swing中的所有组件都接收关键事件,只有可聚焦的组件。 将以下行添加到构造函数中,然后它可以工作:

public Test() {
    setFocusable(true);
    addKeyListener(this);
}

代码样式:可以省略对super();的超级构造函数的显式调用(事实上,默认的超级构造函数将被隐式调用)。此外,访问本地方法或字段时无需使用this.

答案 1 :(得分:1)

您的小组应该可以集中精力。将您的构造函数更改为此,它将起作用:

public Test() {
    super();
    setFocusable(true);
    addKeyListener(this);
}