2010-02-11 21 views
4

我使用GridBagLayout以Java創建GUI。我有沒有辦法創建一個組件組,以便我可以將引用傳遞給組並且可以訪問所有組件?組java組件

我曾考慮創建一個面板並按照這種方式對組件進行分組,但是我想知道是否有另一種方法可以利用GridBagLayout的複雜性。

非常感謝!

+0

你是什麼意思的「有機會獲得所有人?」 – finnw 2010-02-11 14:44:54

+0

我有一堆'JLabel','JTextField's和'JButton's。標籤描述了文本字段中的內容,並且該按鈕將更改文本字段中的內容。我的問題如下:有沒有辦法知道哪個文本字段與按鈕的動作偵聽器中的特定按鈕相關聯? – chama 2010-02-11 14:56:23

+0

Map 也許。 – vickirk 2010-02-11 16:24:15

回答

3

那麼,如果你不能用JLabel,JTextField和JButton來創建一個包含你的組的bean,你可以在你的主UI面板上使用Map來在添加它們時註冊這些元素。 像

Map<K, List<Component>> 

某些結構可能工作,其中K是一組一個標識符。通過這種方式,您可以將組件與ui中的組件分開。

0

通常的方法是按照您的建議使用JPanel。請記住,JPanel本身可能有自己的獨立佈局管理器。因此,您可以使用JPanel上的GridBagLayout將元素放置在面板上。

+0

這個解決方案的唯一問題是,您可能很難將外部和內部面板的組件對齊在一起... – Guillaume 2010-02-11 14:47:38

+0

@Guillaume需要仔細規劃才能創建有效的佈局。但是組件在面板中分組的方式以及面板如何彼此相鄰放置會影響您提到的對齊方式的外觀。 – 2010-02-11 14:50:14

2

您應該將面板視爲只寫。你打開你的組件,所有的設置和正確的佈局約束。你(幾乎)不會去搜索組件。

取而代之,將組件添加到您設置的Set(或類似)中。然後你可以做一個非常乾淨的posh for循環在集合上來執行適當的任務。更高級的技巧是讓單個觀察者(聽衆)從模型中刷新組件。

+0

我絕不會認爲面板是隻寫的。你必須有一些漂亮的靜態用戶界面。我經常添加和移除組件,例如我可能會使用裝飾模式向窗口小部件添加/刪除東西來指示錯誤或指示某些內容。此外,許多應用程序基於數據動態地生成其視圖,或者可能使用bean屬性或反射來從數據填充手動創建的UI。 – vickirk 2010-02-11 16:26:12

+0

「add」和「remove」是寫/不讀操作。 (我實際上傾向於隱藏/顯示,而不是添加/刪除,儘管添加/刪除對於非表格表格非常有用。) – 2010-02-11 17:21:07

+0

對不起,我誤解了你的評論,當你說只寫我認爲你的意思是重擊的東西在面板上,多數民衆贊成它,我很抱歉。我喜歡網格包,並找到它已經存在的地方,並將其替換爲需要的結果。 – vickirk 2010-02-11 22:43:01