2017-04-23 61 views
-2

我正在開發一個遊戲項目。我創建了一個GUI類,我想爲每個遊戲玩家創建一個實例。所以每個玩家都會有一個遊戲畫面。多個JFrame實例上的相同組件

某些信息會顯示在特定的播放器屏幕上,有些信息會很常見。爲了顯示常見信息,我創建了一個靜態JLabel,其中放置了一個圖標。但是我有一個問題,圖標只出現在其中一個屏幕上。

爲什麼會發生這種情況?

+0

.........................你好? –

回答

1

簡答:你不行。 Swing庫的一個基本規則是一個組件只會顯示在一個且只有一個容器中,通常是該組件添加到的最後一個容器。

較長的答案:你不想。你希望以這樣一種方式來構建程序,即程序的模型及其邏輯基礎與GUI本身很好地分離。所以你想要做的是讓每個GUI元素共享相同的模型,並使用這些信息來創建自己獨特的視圖。這也具有優勢,因爲如果玩家想要以不同的角度或角度展示元素,他們可以做到這一點,而不會影響其他玩家看到的東西。


邊注:請注意,一個的ImageIcon 可以共享,並在你的GUI的多個不同地點觀看,因爲它不是一個Swing組件,但JLabel的不能在多個位置進行查看。

備註2:請務必閱讀:The Use of Multiple JFrames: Good or Bad Practice?,因爲這包含與您的程序結構相關的信息。

附註3,關於:

顯示常見的信息,我創建了一個靜態的JLabel ...

我會避免使用靜態字段,如果在所有可能的。雖然在小型簡單玩具程序中這樣做很好,但由於您使用的靜態字段越多,增加耦合代碼的風險就越大,從而增加其複雜性,從而增加其複雜性難以治癒蟲子的風險。通過隱藏您的信息,提高班級凝聚力並減少代碼耦合,遵循良好的面向對象操作規範,您將成爲一個快樂的編碼人員,使用更簡潔,更易於調試和增強程序。