2010-10-13 76 views
2

這基本上是一個建築問題。Swing中的複合圖案

我想實現composite pattern處理Swing組件;也就是說,我想將幾​​個組件與其監聽器和邏輯組合在一個單一組件中,以便於處理。

考慮一個簡單的目錄瀏覽器;比如說,JScrollPane中的一個JTree,其中一些邏輯處理用戶擴展JTree節點時填充文件名。你將如何實現?

擴展JScrollPane並在構造函數中添加JTree等,然後您的應用程序處理JScrollPaneExtended類嗎?或者你是擴展JPanel還是JComponent?或者,當您填充JFrame時,您是否使用所調用的方法將所有這些類拼接在一起?或者是其他東西?爲什麼?

我基本上在尋找關於別人使用的粗略指導原則;我顯然希望處理某種形式的JComponent,以便在構建GUI時更輕鬆地進行處理,但是不管怎樣,它不適合擴展最頂層的組件(本例中爲JScrollPane),只是爲了讓某處放置膠合代碼。

回答

1

我確實做到了對專有的擺動應用使用一個單獨的且平行的類層次結構,其中一個「組件」類中封裝一個或幾個JComponent秒。我需要一個基類來做很多常用的東西(例如,從XML文件設置屬性),所以擴展JComponent不是一個選項。

對於簡單的小部件,如文本字段和按鈕,我的組件類只包含一個小部件。對於可能滾動的任何內容(表,列表,面板),我的組件在功能小部件頂部有一個JSrollPane。我也有一個「組」組件,它處理一組複選框或單選按鈕。

這需要一些努力來建立,但一旦你有基本的設施,這是很容易的添加新的組件。

+0

如果你不擴展JComponent,你擴展(或不擴展)是什麼?如果不是JComponent,如何將組件放在GUI中? – Domchi 2010-10-14 22:10:40

+0

@Domchi:我的「組件」只是至少一個具體的「JComponent」實例的花哨包裝。基類定義了'JComponent getWidget()'(實際上我用''將其泛化),並且佈局管理器和其他所有工作都是一樣的。 – 2010-10-15 01:50:38