2017-07-28 29 views
0

我讀過使用setBounds()命令創建GUI是不好的。使用setBounds()創建一個GUI

我知道如何使用佈局管理器,我不得不說他們也有它們的缺點。

我正在編程一個遊戲的時刻,有時我需要堆疊組件上面彼此。我發現沒有辦法使用佈局管理器來做到這一點,但setBounds()完美的作品。

您能否解釋我如何使用佈局管理器堆疊組件,並告訴我爲什麼使用setBounds()方法爲此目的不好? 還是很好,與Java編碼的遊戲GUI一起使用?當涉及到的東西像計算控制的正確尺寸,位置在正確的地方的一切,當GUI被調整等

+0

顯示您嘗試過的代碼。要使用佈局管理器堆疊組件,請使用'Box.createVerticalBox()'。 – markspace

+0

我現在不會使用Swing來編寫任何Java GUI,特別是不是用於遊戲的。你有沒有看過JavaFX?它來自動畫背景,所以它應該更適合您的目的。 – sina

+0

絕對定位對於遊戲來說可能是很好的(取決於遊戲風格,就是這樣)。如果你想用佈局管理器堆疊東西,你可以看看分層的窗格:https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html – Berger

回答

2

佈局管理採取了很多的重量離開你的肩部

基本上你只要告訴佈局經理「我希望這個控制在那邊的角落」,佈局經理負責將它保持在那裏,無論窗口發生什麼,用戶是否調整大小,移動它,...

遊戲界面是可能會隨着元素不斷移動而動態變得更加動態佈局管理員通常不擅長這些,他們通常是爲靜態用戶界面設計的。大多數桌面軟件(需要引用?))利用這樣的靜態接口,並且佈局管理器可以幫助這些接口的程序員,使他們不必擔心上面提到的所有細節。

由於遊戲界面是一種不適合佈局管理器使用的用例,因此不要將其用於任何事情。仍然可以使用兩種技術的組合 - 使用佈局管理器來定位靜態界面元素(您應該在某個地方或類似地方有一個菜單按鈕?),但對所有正在移動的動態元素使用絕對定位。

不過,我建議你看看JavaFX,正如我在上面的評論中所述。它更適合繪製動畫,移動的組件,並應該爲您節省大量工作。

當然總會有例外 - 例如Sudoku界面就是你可以很好地處理佈局管理器的事情,儘管它絕對是一款遊戲。

1

您能解釋一下如何使用佈局管理器堆棧組件,並告訴我爲什麼使用setBounds()方法爲此目的不好?還是很好,與在Java中編碼的遊戲GUI一起使用?

定義堆棧?

Swing附帶了用於堆疊組件的佈局管理器。查看OverlayLayout。這不是最靈活的,但你可以用Java Layout with Component always in Top Right中的代碼進行試驗,看它是否符合你的要求。

或者,您可以查看Overlap Layout,它的佈局屬性更靈活一些。

最後,您還可以將JLabel添加到JLabel。使用一個標籤作爲背景。然後,您可以設置該標籤的佈局管理器,然後添加另一個Swing組件。