对于家庭作业,我必须制作一个Java程序,在单击“开始”按钮时在jframe上绘制一个红色圆圈。单击按钮时,将调用方法setSmallCircle
。这确实有效,但在这个方法中我正在调用repaint()
,但这似乎不会调用paintComponent
方法。
到目前为止,这是我的代码:
import java.awt.*;
import javax.swing.*;
class ReactionPanel extends JPanel {
Color color;
int size;
public void paintComponent(Graphics g){
System.out.println("paintcomp 1");
super.paintComponent(g);
System.out.println("paintcomp 2");
g.setColor(color);
g.fillOval(200, 200, size, size);
}
public void setSmallCircle(Color c){
color = c;
size = 10;
System.out.println("drawing");
repaint();
System.out.println("repaint called");
}
}
方法setSmallCircle(Color.red)
由其他一些类调用。有谁知道“repaint()”为什么没画红圈?
答案 0 :(得分:1)
对swing组件绘制的任何更新都应该在EDT (eevent dispatch thread)内。然而,在尝试以下部分时:
public void paintComponent(Graphics g){
System.out.println("paintcomp 1");
super.paintComponent(g);
g.setColor(color);
System.out.println(color); // print color as null
g.fillOval(20, 20, size, size); // printing size as 0
System.out.println(size);
}
color
中size
和setSmallCircle()
的更新未生效!! paintComponent
似乎继续使用旧值,而不是更新值。