2013-03-08 65 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