调整JavaJFrame的大小会更改图形组件的颜色

调整JavaJFrame的大小会更改图形组件的颜色,java,Java,我刚开始使用Java Graphics,我编写了两个类: /*Paintr.java文件*/ 导入java.awt.Graphics; 导入java.awt.Color; 导入javax.swing.JPanel; 导入java.util.Random; 公共类画家扩展JPanel{ 公共组件(图形g){ 超级组件(g); 这个.背景(颜色.白色); Random gen=新的Random(); g、 setColor(新颜色(gen.nextInt(256)、gen.nextInt(256)、

我刚开始使用Java Graphics,我编写了两个类:

/*Paintr.java文件*/
导入java.awt.Graphics;
导入java.awt.Color;
导入javax.swing.JPanel;
导入java.util.Random;
公共类画家扩展JPanel{
公共组件(图形g){
超级组件(g);
这个.背景(颜色.白色);
Random gen=新的Random();
g、 setColor(新颜色(gen.nextInt(256)、gen.nextInt(256)、gen.nextInt(256));
g、 fillRect(15,25,100,20);
g、 抽绳(“当前颜色:+g.getColor(),130,65);
}
}
主要课程包括:

import javax.swing.JFrame;
公共类应用程序{
公共静态void main(字符串[]args){
JFrame=newjframe(“绘图素材”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
油漆板=新油漆板();
框架。添加(板);
框架。设置尺寸(400300);
frame.setresizeable(true);
frame.setVisible(true);
}
}
现在,如果我编译并运行它,它就会工作。它显示我的随机颜色。我不明白的是,为什么在我调整框架大小后,它会改变显示的颜色。为什么它会调用这段代码:

g.setColor(新颜色(gen.nextInt(256)、gen.nextInt(256)、gen.nextInt(256));
g、 fillRect(15,25,100,20);
g、 抽绳(“当前颜色:+g.getColor(),130,65);
每次调整帧大小时都会调用
paintComponent()
函数。这是为了允许开发人员调整其他东西的大小,以适应新的大小


如果你不想发生这种情况,将你的颜色定义为一个变量

Color color = new Color(gen.nextInt(256),gen.nextInt(256),gen.nextInt(256));
然后在
paintComponent()
函数中,只需绘制该颜色即可

public void paintComponent(Graphics g){
    super.paintComponent(g);
    this.setBackground(Color.WHITE);
    g.setColor(color);
    g.fillRect(15, 25, 100, 20);
    g.drawString("Current color: "+ g.getColor(),130,65);
}

如果您不希望发生这种情况,请考虑将随机颜色绘制到缓冲区,然后在 PruttCube(…)>代码>方法中绘制它。谢谢。现在有道理了。