2013-08-26 86 views
0

我正在開發和80年代的老年人開心繪製80撲克遊戲。從另一個類的框架JComponent repaint()

class DDHGamePanel extends JPanel{ 
...etc... 
DDHAdvertising adv = new DDHAdvertising(); 
...etc... 

public void paintComponent(Graphics g) { 
adv.isOptimizedDrawingEnabled(); 
adv.setEnabled(true); 
adv.repaint(); 
} 
} 

這是我遊戲的主面板。我拿出了很多代碼來使它更好。我有一個類DDHAdvertising,有一個繪畫組件。

public class DDHAdvertising extends JComponent { 

public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
    drawAdvertisingBanner(g,getBanner1(),30,30); 
    g.drawString ("Test",40,360); 
    } 
} 

我希望能夠在paintComponent到底我JPanel能夠重新繪製,與repaint()方法擴展JComponent任何類。我確信這可以做到,但我不知道該怎麼做。

我希望我的所有圖形類都有一些引用它的組件,例如將所有繪製到屏幕上的卡片都說出來。我想爲屏幕上的每個組件分配一個類,然後調用它的repaint()方法,該方法應該調用該特定類的paintComponent()方法。我已經閱讀了很多關於這個主題的文章,但是我沒有在代碼中看到這個特殊的例子。

+2

歡迎使用計算器。你應該發佈一個[SSCCE](http://www.sscce.org),我不認爲人們會給你發送一封郵件,你應該在這裏發帖,因爲stackoverflow爲將來的訪問者提供了相同的相關問題..所以當你付出最大的努力去做最好的問題成爲答案。 – nachokk

+0

你的問題是什麼?你看起來像「模板方法」嗎? – nachokk

+0

*「我希望能夠在我的'JPanel'中的'paintComponent'的末尾能夠重繪任何使用'repaint()'方法擴展'JComponent'的類。」*爲什麼?如果你的意思是「DDHAdvertising」中包含的組件 - 它們用'super.paintComponent(g);'來計算。否則,應該不需要重新繪製其他任何東西。這樣做是爲了顯示**這個自定義組件會導致無限遞歸的容器。 –

回答

3

你想要的是super.paintComponent(g);在JPanel的paintComponent。它導致所有的孩子也被重新粉刷。當你覆蓋一個組件(包括JPanel)時,你不應該刪除它。

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    adv.isOptimizedDrawingEnabled(); 
    adv.setEnabled(true); 
    adv.repaint(); 
} 
+1

*「'super.paintComponent(g);'..你永遠不應該刪除這個」*我一直認爲這是一個奇怪的評論,當我只是真正閱讀第二個代碼片段,它*沒有*刪除它。我錯過了第一個代碼片段! +1 –

+0

是的,我不確定adv.repaint()是否有必要,但如果它被添加到JPanel中,但並不完全確定他想要什麼。 – arynaq

+0

*「不完全確定」*我也不是 - 現在和以前一樣。 ;) –

相關問題