我想如果我在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);
}
}
感谢您的帮助。
答案 0 :(得分:1)
并非Swing中的所有组件都接收关键事件,只有可聚焦的组件。 将以下行添加到构造函数中,然后它可以工作:
public Test() {
setFocusable(true);
addKeyListener(this);
}
代码样式:可以省略对super();
的超级构造函数的显式调用(事实上,默认的超级构造函数将被隐式调用)。此外,访问本地方法或字段时无需使用this.
。
答案 1 :(得分:1)
您的小组应该可以集中精力。将您的构造函数更改为此,它将起作用:
public Test() {
super();
setFocusable(true);
addKeyListener(this);
}