1

私はこのコードが無意味に見えることに気づきました、私は構造を示すために無関係なものを取り除いたところです

class Drawer extends JComponent {
  public Drawer(int[] data) {

    System.out.println("drawer");

    for(int x = 0; x < data.length; x++){}
      //work out what to draw
    repaint();
  }

  public void paintComponent(Graphics g) {
    super.paintComponent(g);     
    System.out.println("drawerpC"); //check to see if it is called
    //draw stuff
  }  
}

別のファイルでは、の新しいインスタンスがDrawer定期的に呼び出されます。呼び出されるたびにdata異なります。したがって、呼び出されるたびに、Drawer呼び出すpaintComponent必要があります。

私は他のファイルにこのコードを持っています:

Drawer d = new Drawer(data);
myGUI.con.add(d); //myGUI.con is a previously set up container

repaint()が呼び出される原因paintComponentではないので(そうでない場合はstdoutが表示されます)、paintComponent呼び出しごとに強制的に呼び出されるようにするにはどうすればよいDrawerですか?

4

2 に答える 2

2

コンポーネントが表示階層の一部になるまで、呼び出しrepaintは効果がありません。コンストラクターがまだ実行されている間は、階層の一部になることはできません。

1 つのオプションはHierarchyListener、表示階層のルートに a を追加し、そこで再描画を行うことです。ただし、何を達成しようとしているのかは明確ではなく、これが最善のアプローチではない可能性があります。

于 2012-10-14T16:09:29.817 に答える
2

int[]をクラス属性として格納します。に移動//work out what to drawpaintComponent(Graphics)ます。

于 2012-10-14T16:19:56.950 に答える