[英]How to repaint in Java
我正在学习GUI编程课程。 我很难理解如何将Box类重新绘制为其他颜色。 这是我的GUI类:
public class Box extends JPanel {
private Color color;
private int boxNumber;
public Box(Color color, int boxNumber){
this.boxNumber = boxNumber;
this.color = color;
}
public void changeColor(){
setBackgroundColor(Color.WHITE);
repaint();
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
setBackground(color);
}
}
这是我将其添加到Frame
:
public class MainHeader {
Box box[];
public MainHeader(){
}
private void setBox(){
box = new Box[4];
Color color[] = {Color.RED, Color.YELLOW, Color.BLUE, Color.ORANGE};
for(int i = 0; i < color.length; i ++){
box[i] = new Box(color[i],i);
}
}
private void gui(){
JFrame f = new JFrame();
f.setLayout(new GridLayout(2,2,1,1));
setBox();
for(Box b : box)
f.add(b);
f.setSize(500,500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setResizable(false);
f.setVisible(true);
}
}
首先,您不需要这样做...
protected void paintComponent(Graphics g){
super.paintComponent(g);
setBackground(color);
}
您永远都不想在ANY绘制方法中更改ANY组件的状态,这只会导致问题无止境,并且可能会因为消耗CPU周期而使您的程序陷于瘫痪...
其次,您的Box
类的构造函数从不设置Box
的背景色。 实际上,您不需要维护对颜色值的引用,因为Box
通过其继承性已经支持此功能。
public Box(Color color, int boxNumber){
this.boxNumber = boxNumber;
setBackground(color);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.