2012-07-18 78 views
0

当我重绘()的面板,在这里我把我的JLabel上,我得到的错误,但它仍然有效。我试着把panel.repaint();代码在try语句中,并没有帮助。任何其他人有JPanels重绘()的问题?呼叫重绘()对于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

你知道错误是什么吗? – 2012-07-18 23:35:44

+0

有什么错误?你在画面上画画吗?如果是这样,考虑重写paintComponent方法而不是paint方法,并确保始终调用super.paintComponent(g); – 2012-07-18 23:36:40

+0

错误消息是太大了,一个评论 第一部分 异常在线程“AWT-EventQueue的 - 0” java.lang.ArrayIndexOutOfBoundsException:没有这样的孩子:21 \t在java.awt.Container.getComponent(来源不明) \t在javax.swing.JComponent.rectangleIsObscured(来源不明) \t在javax.swing.JComponent.paint(来源不明) \t在javax.swing.JComponent.paintToOffscreen(来源不明) \t在javax.swing.RepaintManager中的$ PaintManager .paintDoubleBuffered(来源不明) \t在javax.swing.RepaintManager中的$ PaintManager.paint(来源不明) ) – 2012-07-18 23:41:13

回答

1

确保对UI的所有修改在事件调度线程被执行,这包括添加和从容器中取出部件。

至于莱昂州,使用invokeLater方法将确保操作是在美国东部时间正确执行。

+0

invokeLater方法如何工作,以及如何实现它? – 2012-07-20 03:07:44

+1

InvokeLater基本上将一个Runnable对象放置到ETD队列中,允许它在将来某个时间(在ETD内)执行。基本上,你需要调用SwingUtilities.invokeLater(...)并传递一个实现了Runnable接口的Object。当ETD处理队列时,它将调用“运行”方法。 – MadProgrammer 2012-07-20 05:03:45

+1

您可以查看http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html了解更多详情 – MadProgrammer 2012-07-20 05:03:54

2

我真的不知道,但我想我以前在同样的问题绊倒了。我相信使用SwingUtilities.invokeLater帮助我支持。试试吧,我并不完全确定。