2011-11-20 35 views
2

我想製作一個圖形用戶界面,並通過代碼來完成,而不是像在Netbeans中一樣拖動所有東西。如果可能的話,我希望爲每個我要插入的東西設置座標,因爲它會爲我提供我想要的精度。我嘗試了GridBagLayout,並沒有發現它符合我的喜好,但也許我不知道該怎麼做。也許MigLayout對我來說是一個很好的選擇,但我想知道是否有更好的我需要的東西。我應該爲我的Java GUI使用哪個LayoutManager?

總結:我想創建一個GUI,我可以直接添加每個對象的特定座標。我使用哪種佈局?

+1

你想要做的是避免任何佈局管理器。佈局管理器的重點在於使組件的佈局正確無論外觀和感覺如何,字體等。使用絕對座標不利於佈局管理器的目的。學習如何使用它們:這是一件好事。 –

+0

@JB Nizet我顯然是新的揮杆。無論哪種方式,是否有一種簡單的方法來添加一個組件以及您想要的座標? – snotyak

回答

1

兩者兼而有之。在Eclipse中嘗試WindowBuilder。它提供了雙向設計和代碼生成。

+0

這將是有益的,但我需要在我的GUI中動態創建對象。這就是爲什麼我想堅持只編碼。 – snotyak

+0

你仍然可以做到這一點。 WindowBuilder只是將繁重的工作從生成GUI中解放出來。可視化地佈置它,手動調整代碼,並且如果需要的話將它重新加載到WindowBuilder中。我通常不會做第三步,但是有選擇,特別是對於快速的健康檢查。 – Dave

+0

我安裝了這個。很有幫助。最後,我最終與另一個建議一起使用。 – snotyak

5

對於每個面板,根據您將要使用的佈局,您可以/應該擁有不同的佈局管理器。沒有「通用」的佈局管理器,特別是在手動編碼時,使用「最合適的」佈局管理器來完成您正在解決的任務是優雅和有用的。例如,其他非常先進的GridBagLayout無法模擬WrapLayout。

您可能會發現this page作爲正確佈局管理器選擇的提示列表很有用。

但是請注意,每個佈局管理器在Swing中都有它的怪癖,所以從一個佈局管理器切換到另一個佈局管理器可能會帶來一些小麻煩。例如,其中一些方面尊重最小/最大尺寸,一些不等,等等。

對您的總結:你不應該嘗試設置座標「手動」。雖然這是可能的,但以邏輯方式表達視覺元素之間的關係要好得多。這對於使頁面可調整大小,解決本地化問題,適當嵌套和提取控件以及在目前我不記得的許多其他地方都會有所幫助。

1

Specyfing座標(即使用NullLayout)總是一個壞主意。應該始終使用類來處理組件放置,因爲它將處理您不應處理的所有類型的事件(例如在調整容器大小時計算新的座標)。

我個人更喜歡使用GridBagLayout,因爲它允許您指定所有類型的約束(如何分配可用空間,組件將使用多少空間,插入等)。 This tutorial將幫助您開始使用GridBagLayout

存在其他LayoutManager,各自具有強度和弱點(例如,Flow Layout,MigLayout,BoxLayout)。根據你的需要,一些管理者可能太簡單,或者矯枉過正。您應該嘗試並學習其中的許多方法,以便您可以根據自己的需求找到合適的方案。

+0

我的GUI是用於演示給我的課,所以它基本上是要被動畫。我需要從屏幕上動態創建/刪除對象。儘管如此,我會嘗試一下GridBagLayout。 – snotyak

+0

@chickeneaterguy這是可能與所有'LayoutManager'類動態創建/從容器中刪除對象。您的「需求」應該解釋爲您的GUI佈局有多複雜,需要顯示多少個對象,以及通過您希望的約束來控制組件佈局的級別。 – Laf

2

CoordinateLayout看看:

允許鋪設了基於該 基於對佈局可用空間適應的絕對位置/大小的部件。