我有一个扩展JPanel并实现KeyListener的类。在构造函数中,我有一个名为fontHeight的变量设置为数字:
public class Main {
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setVisible(true);
Foo panel = new Foo();
jf.add(panel);
for (;;) {
jf.validate();
jf.repaint();
Thread.sleep(30);
}
}
}
public class Foo extends JPanel implements KeyListener {
private int fontHeight;
private String content;
public Foo() {
content = "";
fontHeight = getfontMetrics(getFont()).getAscent();
addKeyListener(this);
setFocusable(true);
System.out.println("this works and sh*t");
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString(content, 0, 13);
}
public void keyPressed(KeyEvent e) {
content += e.getKeyCode();
}
}
当我运行它时,它会打印it works and sh*t
。所以它不会卡在构造函数中。它也不是它没有重新粉刷;如果我添加一行代码以在content
的末尾向paintComponent
添加字符,则会绘制扩展字符串。
如果我注释掉fontHeight =
行,它会正常工作。我没有得到的是如何分配给变量会导致KeyListener无法运行。我只是错过了一些非常简单的东西吗?任何帮助表示赞赏。
答案 0 :(得分:0)
将此方法添加到您的Foo类:
0045$002,34234 = 234234
$000300 = 300
$000387687 = 387687
$000 = 0
$00 = 0
$0 = 0
这告诉它,只要它被添加到JFrame,它就会实际请求焦点(而不是仅仅是可聚焦的)。焦点是一个巨大的痛苦,它使Swing编程方式比它需要的更加混乱。