java - 每次调整窗口大小时,调整窗口大小都会调用paintComponent吗?

标签 java swing

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

这是我要添加到 JPanel 中的类,该 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;
    }
}

最佳答案

这就是将模型与 View 结合起来时会发生的情况。切勿将显示 GUI/图形与内部应用程序逻辑结合起来。它们在逻辑上是独立的,应该保持这样。

但是回答你的问题:你无法控制何时调用 paintComponent() 。即使调用 repaint 也无非是对 java 的 GUI 的一个建议,即它应该重新绘制组件。

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

关于java - 每次调整窗口大小时,调整窗口大小都会调用paintComponent吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20905810/

相关文章:

java - 无法使用 gson 库反序列化来自 SonarQube 的 JSON 响应

Java String自动赋空值

java - 获取javax swing计时器值

java - 为什么我的动画不可见?

java - 在 Java 2D API 中将图像缩放为单个表面

java - 我如何从软键盘启动主要 Activity

java - Spring 系列不工作

java - Struts Actions 和 Composition 优于继承

java - 如何使用 AES_DECRYPT 更新 jtable

java - 必须实现继承的抽象方法