2009-08-13 67 views
5

想象一下,我正在用Java Swing製作一個簡單的字處理器。我已經寫了一組用於執行文本對齊的動作。在菜單欄上我有一個菜單:用JToolbar ButtonGroups同步JMenu ButtonGroups

 
View 
    Left Justify 
    Center Jusitfy 
    Right Justify 

這包括JRadioButtonMenuItems和ButtonGroup的,以確保只有一個項目在任何一個時間選擇。

另外,假設我有一個由JToggleButtons組成的等效工具欄,同樣也是一個ButtonGroup,以確保在任何時候只有按鈕可以處於活動狀態。

「左對齊」JRadioButtonMenu和JToggleButton使用相同的Action初始化,等等與其他項目一起使用。

我的問題是這樣的:同步兩組的最佳方法是什麼?如果我點擊工具欄上的「右對齊」圖標,我希望菜單中的組相應地更新,反之亦然。

回答

2

大量搜索,我發現信息here後我。基本上,您可以將此添加到您的動作的actionPerformed方法:

action.putValue(Action.SELECTED_KEY, Boolean.TRUE); 

而這將爲您做所有的工作!

不幸的是,官方的Sun教程沒有涉及這方面(或者至少我沒有發現它),因此難以發現這樣一種簡單的方法來解決我的問題。

+0

這隻適用於Java 6。 – 2009-08-13 16:18:59

0
+0

謝謝。但是,爲了應用這種模式,似乎需要進行大量的重構。看來,如果我這樣做,我必須專門爲每個項目編碼。我希望有一個更智能的方法來自動確定這一點,因爲菜單項和工具欄項共享相同的操作。 – arooaroo 2009-08-13 11:32:11

1

Observer pattern我的朋友。菜單欄可以觀察工具欄,工具欄可以觀察菜單欄。他們都將是觀察員和可觀察的。每個人都有自己的監聽者,在變化事件中,通知觀察者(另一個人)參數中的新值。

觀察者模式的一大優點是耦合度非常低,所以您不需要大量的重構來實現鏈接,修改它或在將來將其刪除。

0

另一方面(我再次),你可以在外部類中寫1個監聽器。菜單和工具欄的偵聽器。當1改變時,監聽器將它們都設置爲新值。