1

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

4

1 回答 1

1

任何对 swing 组件绘制的更新都应该在EDT(eevent 调度线程)内。然而,在试验以下部分时:

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

  }

更新colorsizeinsetSmallCircle()没有生效!! paintComponent似乎继续使用旧值,而不是更新值。

于 2013-10-10T12:01:09.187 回答