为什么我的jFrame只在我调整窗口大小后才更新?

我知道当你添加/删除一个组件时,你需要revalidate()然后repaint() 。 但是,我正在改变多边形的状态。 最初,显示图像,但是当我按下左右键时,图像不会移动。 如果我移动窗口,gui会更新。 我按键时为什么不更新?

 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); } } } 

调用repaint(); 在你的监听器中的ter.moveR();moveL()之后。

另外我建议使用KeyBindings而不是KeyListener