How to stop the auto-repaint() when I resize the Jframe

China☆狼群 提交于 2019-12-02 08:22:43

so when the JFrame isn't maximized

I don't know why this would cause a problem since only one repaint request should be generated.

or (resizing)

I can see this being a problem since repaint will be invoked for every pixel you resize the frame by. In this case maybe you can use:

Toolkit.getDefaultToolkit().setDynamicLayout(false); 

Now the components will validated after resizing is complete.

this.setBackground(new Color(210,247,255));

Don't use code like the above since changing the background causes repaint() to be invoked which will invoke the paintComponent() method again. Painting methods are for painting only.

Paul Samsotha

"How to stop the auto-repaint() when I resize the Jframe"

Short answer, you don't control it. Longer answer, you need to make sure you aren't doing any thing that changes the state (you are using to paint), in the paintComponent method. For example:

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Random random = new Random();
    int x = random.nextInt(100);
    int y = random.nextInt(100);
    int size = random.nextInt(100);
    g.drawRect(x, y, size, size);
}

What happens here is that every times the GUI repaints, which is not under your control, the rectangle will resize, without you wanting it to. So if you want the rectangle to only repaint when you tell it to, you need to make sure you only manipulate the state (i.e. x, y, size) from outside the paintComponent method, and only use that state to paint. Something like

Random random = new Random();
int x, y, size;
...
void reset() {
    x = random.nextInt(100);
    y = random.nextInt(100);
    size = random.nextInt(100);
}
...
Timer timer = new Timer(25, new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        reset();
        repaint();
    }
}).start();
...
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    g.drawRect(x, y, size, size);
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!