简体   繁体   English

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

[英]Why does my jFrame update only after I resize the window?

I understand that when you add/remove a component, you need to revalidate() and then repaint() . 我了解在添加/删除组件时,需要先revalidate()然后再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. 如果我移动窗口,则gui将更新。 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);
        }
    }
}

Call repaint(); 调用repaint(); after ter.moveR();moveL() in your listener. ter.moveR();moveL()之后。

Additionally I would recommentd to use KeyBindings rather than KeyListener 另外,我建议使用KeyBindings而不是KeyListener

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 为什么 JFrame 的背景图像仅在我在 Swing 中调整窗口大小后才显示? - Why is a Background Image of a JFrame only showing after i resize the window in Swing? 为什么只有我添加到JFrame的最后一个JPanel会调整大小? - Why does only the last JPanel I add to a JFrame resize? 为什么我的JFrame无法更新 - Why does my JFrame not update Jframe JLabel,仅当我调整窗口大小时才刷新图像 - Jframe JLabel, image refresh only if I resize the window JPanel仅在调整窗口大小(JFrame)时显示 - JPanel only displaying when I resize Window (JFrame) 为什么我的 JFrame 在 for 循环后打开? - Why does my JFrame open after a for loop? 关闭用于更新数据库信息的窗口后,如何从数据库更新主JFrame中的列表 - How can I update my List in my main JFrame from a database after closing a the window I use to update the db info 如果我继承 JPanel 和 JFrame,为什么我的 JFrame 保持为空? - Why does my JFrame stay empty, if I subclass JPanel and JFrame? JFrame仅打开关闭,最小化和调整大小按钮,直到调整窗口大小为止 - JFrame opens only the close, minimize and resize buttons until I resize the window 如何仅在按下上一个JFrame窗口的JButton后才显示JFrame窗口? - How to make a JFrame window appear only after I press the JButton of the previous JFrame window?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM