其他分享
首页 > 其他分享> > 为什么我的jFrame仅在调整窗口大小后才更新?

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

作者:互联网

我了解,添加/删除组件时,需要先revalidate()然后再重新绘制().但是,我正在更改多边形的状态.最初显示图像,但是当我按左右键时,图像不会移动.如果我移动窗口,则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

标签:paintcomponent,java,swing,resize,jframe
来源: https://codeday.me/bug/20191011/1894417.html