Java 调整窗口大小每次调整窗口大小时调用paintComponent?

Java 调整窗口大小每次调整窗口大小时调用paintComponent?,java,swing,Java,Swing,为什么每次我调整窗口大小时paintComponent都会更新 这是我要添加到JPanel的类,它添加到JFrame。是在每次重新调整窗口大小时调用对象,还是在绘制组件中发生了什么 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.Random; import javax.swing.JComponent; imp

为什么每次我调整窗口大小时paintComponent都会更新

这是我要添加到JPanel的类,它添加到JFrame。是在每次重新调整窗口大小时调用对象,还是在绘制组件中发生了什么

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Random;

import javax.swing.JComponent;
import javax.swing.JPanel;

class DrawString extends JPanel {
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;
        Font font = new Font("Serif", Font.PLAIN, 10);
        g2.setFont(font);
        g2.drawString("Test string",randInt(1,1000), randInt(1, 1000)); 

        for(int i = 0; i < 100; i++) {
            g.setColor(new Color(randInt(1,255), randInt(1,255),randInt(1,255)));
            g.drawLine(randInt(1,1000), randInt(1,1000), randInt(1,1000), randInt(1,1000));
        }
    }
    protected void paintComponent(Graphics g) {
        // TODO Auto-generated method stub
        super.paintComponent(g);
        super.setBackground(new Color(100,100,100));
        paint(g);
    }
    public static int randInt(int min, int max) {

        // Usually this can be a field rather than a method variable
        Random rand = new Random();

        // nextInt is normally exclusive of the top value,
        // so add 1 to make it inclusive
        int randomNum = rand.nextInt((max - min) + 1) + min;

        return randomNum;
    }
}
导入java.awt.Color;
导入java.awt.Font;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.util.Random;
导入javax.swing.JComponent;
导入javax.swing.JPanel;
类DrawString扩展了JPanel{
公共空间涂料(图g){
图形2d g2=(图形2d)g;
Font Font=新字体(“衬线”,Font.PLAIN,10);
g2.setFont(字体);
g2.抽绳(“测试绳”,randInt(11000),randInt(11000));
对于(int i=0;i<100;i++){
g、 setColor(新颜色(randInt(1255)、randInt(1255)、randInt(1255));
g、 抽绳(randInt(11000)、randInt(11000)、randInt(11000)、randInt(11000));
}
}
受保护组件(图形g){
//TODO自动生成的方法存根
超级组件(g);
超级挫折背景(新颜色(100100));
油漆(g);
}
公共静态整数和整数(整数最小值,整数最大值){
//通常这可以是一个字段,而不是一个方法变量
Random rand=新的Random();
//nextInt通常不包括最高值,
//因此,添加1使其具有包容性
int randomNum=rand.nextInt((最大-最小)+1)+min;
返回随机数;
}
}

当您将模型与视图相结合时,会发生这种情况。切勿将显示gui/图形与内部应用程序逻辑相结合。它们在逻辑上是分开的,应该保持这样

但要回答您的问题:您无法控制何时调用
paintComponent()
。甚至调用repaint都只是向java的GUI建议它应该重新绘制组件


是的,在大多数情况下,调整大小将导致调用
paintComponent()

当您将模型与视图相结合时,会发生这种情况。切勿将显示gui/图形与内部应用程序逻辑相结合。它们在逻辑上是分开的,应该保持这样

但要回答您的问题:您无法控制何时调用
paintComponent()
。甚至调用repaint都只是向java的GUI建议它应该重新绘制组件


是的,在大多数情况下,调整大小将导致调用
paintComponent()

当您将模型与视图相结合时,会发生这种情况。切勿将显示gui/图形与内部应用程序逻辑相结合。它们在逻辑上是分开的,应该保持这样

但要回答您的问题:您无法控制何时调用
paintComponent()
。甚至调用repaint都只是向java的GUI建议它应该重新绘制组件


是的,在大多数情况下,调整大小将导致调用
paintComponent()

当您将模型与视图相结合时,会发生这种情况。切勿将显示gui/图形与内部应用程序逻辑相结合。它们在逻辑上是分开的,应该保持这样

但要回答您的问题:您无法控制何时调用
paintComponent()
。甚至调用repaint都只是向java的GUI建议它应该重新绘制组件


是的,在大多数情况下,调整大小将导致调用
paintComponent()

通过调整窗口大小,您已经更改了窗口的属性,因此应该再次绘制视图元素。我认为这是合理的,因为显示布局的图形属性更改应该触发paintComponent,使您的窗口能够适应这些更改。

通过调整窗口大小,您已经更改了窗口的属性,因此您的视图元素应该重新绘制。我认为这是合理的,因为显示布局的图形属性更改应该触发paintComponent,使您的窗口能够适应这些更改。

通过调整窗口大小,您已经更改了窗口的属性,因此您的视图元素应该重新绘制。我认为这是合理的,因为显示布局的图形属性更改应该触发paintComponent,使您的窗口能够适应这些更改。

通过调整窗口大小,您已经更改了窗口的属性,因此您的视图元素应该重新绘制。我认为这是合理的,因为显示布局的图形属性更改应该触发paintComponent,使您的窗口能够适应这些更改。

当窗口调整大小时,会调用
paintComponent()
来更改窗口以适应其新的大小。如果您每帧都计算一些内容,那么在调用
repaint()
之前,您应该使用单独的方法调用,这样如果由于调整大小而导致
paintComponent()
,您就不会有额外的帧。为什么更改窗口尺寸时不应该调用
paintComponent
?您正在更改要绘制的空间量,可以剪切部分窗口,也可以添加更多要绘制的空间。如果使用布局管理器,组件也可能会随窗口移动和/或调整大小,因此它们也需要以不同的方式绘制。当窗口调整大小时,将调用
paintComponent()
,以更改窗口以适应新的大小。如果您每帧都计算一些内容,那么在调用
repaint()
之前,您应该使用单独的方法调用,这样如果由于调整大小而导致
paintComponent()
,您就不会有额外的帧。为什么更改窗口尺寸时不应该调用
paintComponent
?您正在更改要绘制的空间量,可以剪切部分窗口,也可以添加更多要绘制的空间。如果您使用的是布局管理器,您的组件也可能会随着窗口移动和/或调整大小,因此它们将被重新设置