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被调用(否则你会看到标准输出),那么我如何强制paintComponent每次调用都被调用Drawer

4

2 回答 2

2

在组件成为显示层次结构的一部分之前,调用repaint将无效。当构造函数仍在执行时,它不可能是层次结构的一部分。

一种选择是将 a 添加HierarchyListener到显示层次结构的根并在那里进行重绘。但是,我还不清楚您要完成什么,这可能不是最好的方法。

于 2012-10-14T16:09:29.817 回答
2

将 存储int[]为类属性。搬入。//work out what to draw_paintComponent(Graphics)

于 2012-10-14T16:19:56.950 回答