键盘事件,没反应
import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class TestKey extends JFrame {
public TestKey() {
MyPanel myPanel=new MyPanel();
this.getContentPane().add(myPanel);
setSize(300, 200);
setLocation(100, 100);
setVisible( true );
}
class TestKeyListener extends KeyAdapter{
public void keyPressed(KeyEvent event) {
System.out.println("===========================" + event.getKeyCode());
}
public void keyReleased(KeyEvent event){
System.out.println("W释放" + event.getKeyCode());
}
public void keyTyped(KeyEvent event){
if (event.getKeyCode() == KeyEvent.VK_K) {
System.out.println("按下一次 pressed and released");
}
}
}
class MyPanel extends JPanel{
public MyPanel(){
addKeyListener(new TestKeyListener());
}
}
public static void main(String args[]) {
TestKey application = new TestKey();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
搜索更多相关的解决方案:
键盘
----------------解决方案--------------------------------------------------------
应该是焦点问题
你把addKeyListener(new TestKeyListener())直接加到JFrame中就不会有问题
----------------解决方案--------------------------------------------------------
而且像键盘事件必须注册到顶级窗口类才有效 如JFrame
否则你要为每个可能得到焦点的控件都添加addKeyListener()
我知道的也许也不是很准确 有人看我说得不对 别扁人
----------------解决方案--------------------------------------------------------
不错,楼上说的对,一般给JPanel加键盘监听是没有用的,必须要是可获输入焦点的组件,在获得焦点的时候才可以接受键盘事件
----------------解决方案--------------------------------------------------------
public void keyTyped(KeyEvent event){
if (event.getKeyCode() == KeyEvent.VK_K) {
System.out.println("按下一次 pressed and released");
}
为什么不可以呢?
----------------解决方案--------------------------------------------------------
keyTyped只在输入的时候才会调用,一般用于注册到JTextField,JTextArea等输入组件上
普通组件是不会调用的
----------------解决方案--------------------------------------------------------
哦,原来如此.
----------------解决方案--------------------------------------------------------
昨天的帖子,今天中午才有时间看.问题解决,知道了.
----------------解决方案--------------------------------------------------------