【发布时间】:2016-01-22 00:45:31
【问题描述】:
我正在 java 中测试我的 keyListener。
我在 Ubuntu 14.04 中的系统。我在 main 中设置了一个面板并初始化了关键侦听器。我还将 focusable 设置为 true 并执行 requestFocusInWindow。
但是当我运行程序时,println 永远不会出现在控制台中。对此感到困惑。
package key;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Key extends JPanel{
public void action(){
KeyListener k = new KeyListener(){
@Override
public void keyPressed(KeyEvent k){
System.out.println("key is pressed!");
}
@Override
public void keyReleased(KeyEvent e){
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e){
System.out.println("key is typed!");
}
};
this.addKeyListener(k);
this.setFocusable(true);
this.requestFocusInWindow();
}
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setSize(400,300);
JPanel panel = new JPanel();
panel.setBackground(Color.BLUE);
frame.add(panel);
frame.setVisible(true);
Key k = new Key();
k.action();
}
}
【问题讨论】:
-
因为你用的是
KeyListener,说真的,那东西太喜怒无常了,用Key Bindings API更简单,它解决了焦点相关的问题,并提示更好的代码重用和抽象 -
我也希望
Key在某个时候实际上被添加到框架中并且框架可见 -
嗨,我的相框出现了。但是,将 Key 添加到框架是什么意思
-
查看我的第一条评论,您也可以考虑提供runnable example 来证明您的问题。这不是代码转储,而是您正在做的事情的一个示例,它突出了您遇到的问题。这将导致更少的混乱和更好的响应
标签: java swing keylistener