为JPanels调用repaint()

时间:2012-07-18 23:33:16

标签: java swing jpanel jlabel repaint

当我重新绘制()面板时,我正在放置我的JLabel,我得到错误,但它仍然有效。我试过把panel.repaint(); try语句中的代码并没有帮助。有没有其他人在JPanels上重绘()?

错误消息(从评论中复制):

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 21 
at java.awt.Container.getComponent(Unknown Source) 
at javax.swing.JComponent.rectangleIsObscured(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintToOffscreen(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source) )

2 个答案:

答案 0 :(得分:2)

我不太确定,但我想我之前偶然发现了同样的问题。我相信使用SwingUtilities.invokeLater帮助我支持。 试一试,我不完全确定。

答案 1 :(得分:1)

确保对UI的所有修改都在Event Dispatching Thread中执行,这包括在容器中添加和删除组件。

正如莱昂所说,使用invokeLater方法将确保正确地在EDT上进行操作。