2013-03-08 63 views
0

我感觉好像这个解决方案非常简单,我只是忽略了一些愚蠢的东西,但我似乎无法使我的JPanel之一的repaint()方法起作用。有问题的JPanel是另一个类的成员对象,它处理所有绘制到JPanel背后的逻辑,但是,无论何时在我的线程中调用repaint(),我都看不到任何绘制的内容,也看不到我的系统。 out.println()调用,我把它放在那里用于调试目的。为了方便起见,我已将这些文件放在Github上。以下是我认为可能与它有关的三个文件。如果需要,你可以随时看别人。JPanel重绘()调用不工作

SageLife.java

LifeFramework.java

Grid.java

我已经创作了大量JPanels之前,并已很少遇到这个问题,所以我只是不知道是什么导致它。

+2

更好的帮助sooenr发布一个[SSCCE](http://sscce.org/),简短,可运行,可编译,只是关于问题,减少代码,另一个问题是该链接将过期,未来不可访问读者, – mKorbel 2013-03-08 18:32:23

+1

我觉得我是盲目的 - 'LifeFramework'中的initializeThread()被调用了吗? – 2013-03-08 18:37:42

+0

妈妈咪呀!这是一个意大利面代码! – Nate 2013-03-08 18:46:55

回答

3

在您的GridJPanel中,您优先于paintComponents而不是paintComponent。这不符合Swing的涂料链机制。

@Override 
public void paintComponents(Graphics g) { 
    super.paintComponents(g); 

注:总是去Swing Timer超过Thread在摇摆处理UI更新。

+0

+1,很好的现象 – 2013-03-08 18:32:52

+0

@Override注解不应该在编译时警告这一点吗? – Nate 2013-03-08 18:42:55

+0

不,'paintComponents'也存在,但是对于自定义绘画来说是错误的方法:) – Reimeus 2013-03-08 18:44:02