我意识到这段代码看起来毫无意义,我只是摆脱了显示结构的无关紧要的东西
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
调用}?
答案 0 :(得分:2)
在组件成为显示层次结构的一部分之前,调用repaint
将不起作用。当构造函数仍在执行时,它不可能是层次结构的一部分。
一个选项是将HierarchyListener
添加到显示层次结构的根目录并在那里进行重绘。但是,我不太清楚你想要完成什么,这可能不是最好的方法。
答案 1 :(得分:2)
将int[]
存储为类属性。将//work out what to draw
移至paintComponent(Graphics)
。