强制调用paintComponent

时间:2012-10-14 16:02:27

标签: java user-interface awt

我意识到这段代码看起来毫无意义,我只是摆脱了显示结构的无关紧要的东西

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调用}?

2 个答案:

答案 0 :(得分:2)

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

一个选项是将HierarchyListener添加到显示层次结构的根目录并在那里进行重绘。但是,我不太清楚你想要完成什么,这可能不是最好的方法。

答案 1 :(得分:2)

int[]存储为类属性。将//work out what to draw移至paintComponent(Graphics)