簡體   English   中英

強制從另一個類重新粉刷-Swing

[英]Force repaint from another class - Swing

我基本上有1個名為ClueGame的課程,專門用於使用秋千繪畫主要gui。

在此類中,我遍歷BoardCell對象的列表,並從paintComponents(Graphics g)中調用boardcell.draw(g),后者將矩形繪制到板上。

但是,在完全不同的類WalkwayCell類(BoardCell的子類)中,我需要更新特定矩形的顏色。 我在想像cell.updateColor()

但是很明顯,我需要抽簽才能做到這一點。 我不知道如何更新板上一個對象(矩形)的顏色,因為我沒有圖形對象,因此無法調用繪圖。

希望這是有道理的。 如果有人要求,我可以發布代碼。

您有許多選擇...

你可以

通過您的參考ClueGame到的實例WalkwayCell那么這將是能夠調用的repaintClueGame直接參考。

這里的問題是,你暴露整個ClueGame類的實例過WalkwayCell ,這使得他們能夠為所欲為吧...

你可以

使用觀察者模式 ,允許ClueGame監測變化的狀態WalkwayCell小號

這意味着WalkwayCell並不在乎,它只會在對象狀態發生變化時提供某種事件通知,並且不會將應用程序的某些部分暴露給其他無權知道的部分。

Swing的監聽器API使用了觀察者模式。 您可以看一下編寫事件監聽器以了解更多想法...

創建Swing GUI時,創建GUI模型類很重要。 模型類保存GUI的數據。 具有模型類使對Swing視圖類的編碼變得非常簡單。

在您的情況下,您將按照建議使用諸如cell.updateColor()之類的方法來更改WalkwayCell類實例的狀態。 首先,您更新模型實例。 然后在視圖上繪制模型實例。

我在Hangman Swing GUI文章中通過一個工作示例更詳細地解釋了此概念。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM