1

宿題のために、「開始」ボタンをクリックしたときに jframe に赤い円を描く Java プログラムを作成する必要があります。ボタンをクリックすると、メソッド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);

  }

アップデートcolorsizesetSmallCircle()も効かない!! paintComponent更新された値ではなく、古い値を使用し続けているようです。

于 2013-10-10T12:01:09.187 に答える