我已经创建了类 start,在按右箭头键时,一个矩形 block 将移动。但此代码仅在添加 setFocusable(true)
时才有效。我阅读了 Java 文档,以及许多以前的 Stack Overflow 问题,但我仍然不知道为什么 setFocusable
如此重要。请回答我,仅解释此代码。
public class start extends JPanel{
int x=0, xa=1;
public start() {
addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent ke){
if(ke.getKeyCode()==KeyEvent.VK_RIGHT){
xa=xa+1;
repaint();
}
}
public void keyTyped(KeyEvent ke){}
public void keyReleased(KeyEvent ke){}
});
setFocusable(true);
}
public void paint(Graphics g){
super.paint(g);
g.fillRect(x+xa,100,40,50);
}
}
最佳答案
but I still have no idea why setFocusable is so important.
事件仅分派(dispatch)到具有焦点的组件。因此,只有当面板“可聚焦”并且具有焦点时,您的 KeyEvent 才会被分派(dispatch)到面板。
参见Motion Using the Keyboard有关此主题的更多信息,包括两种不同的解决方案。
关于java - java中setFocusable的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29748284/