在Java中,repaint()不调用paintcomponent()

时间:2013-10-10 11:56:25

标签: java swing paintcomponent

对于家庭作业,我必须制作一个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()”为什么没画红圈?

1 个答案:

答案 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);

  }

colorsizesetSmallCircle()的更新未生效!! paintComponent似乎继续使用旧值,而不是更新值。