本文介绍了为什么我的jFrame只在我调整窗口大小后才更新?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我了解当你添加/删除一个组件时,你需要 revalidate()
然后 repaint()
。但是,我正在改变多边形的状态。最初,显示图像,但是当我按下左右键时,图像不会移动。如果我移动窗口,gui会更新。我按键时为什么不更新?
I understand that when you add/remove a component, you need to revalidate()
and then repaint()
. However, I am changing the state of my polygon. Initially, the image is shown, however when I press the left and right keys, the image does not move. If I move the window, the gui is updated. Why doesn't it update as I press the keys?
public class Terminos {
private LeftTermin ter;
private String[] commands = { "UP", "DOWN", "RIGHT", "LEFT" };
public Terminos() {
initComp();
}
public void initComp() {
JFrame jFrame = new JFrame();
jFrame.setSize(500, 500);
Component pane = new myPanel();
jFrame.add(pane);
ter = new LeftTermin(200, 200);
jFrame.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
System.out.println("r");
ter.moveR();
// Right arrow key code
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
System.out.println("l");
ter.moveL();
// Left arrow key code
} else if (e.getKeyCode() == KeyEvent.VK_UP) {
System.out.println("u");
// Up arrow key code
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
// Down arrow key code
System.out.println("d");
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
});
jFrame.revalidate();
jFrame.setVisible(true);
}
class myPanel extends JPanel {
@Override
public void paintComponent(Graphics canvas) {
super.paintComponent(canvas);
ter.draw(canvas);
}
}
}
推荐答案
在监听器中 c> ter.moveR(); moveL()之后调用 repaint();
。
另外我建议使用而不是 KeyListener
Additionally I would recommentd to use KeyBindings rather than KeyListener
这篇关于为什么我的jFrame只在我调整窗口大小后才更新?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!