似乎有涉及兩個問題:
- 如何描述和造就了一大批的行動?
- 如何在GUI中表示大量的動作?
@Tom's answer用於#1,而@Fabio's用於#2。
無論你喜歡什麼,你都可以使用#1,xml,csv的任何文本格式。將代碼和代碼分開確實是一個好主意。 XML是偉大的分層數據,所以它可能是矯枉過正,如果你只是需要一個平坦的列表:
<doc>
<action name="Action 1" id="ACT1" description="blah blah" icon="icon1.gif"/>
<action name="Action 2" id="ACT2" description="yada yada" icon="icon2.gif"/>
...
</doc>
但是解析這樣一個簡單的XML基本上是免費的,所以你可能也只是使用它。你做而不是,但是,需要一個像SwiXML一樣的全功能的XML GUI工具包,除非你想將許多其他GUI小部件以複雜的佈局添加到你的應用中。
請注意我在上面的示例中的屬性。 id
將映射到唯一的操作命令。你可以任何你想要的方式顯示description
和icon
(我想你已經使用過圖標了)。您也可以使用助記符,加速器等其他屬性,此時使用XML開始付清:您可以添加所需的任意屬性。
XML中的一個明顯的缺失是實際的操作本身。我做不是認爲你應該把Java代碼放在XML中。它擊敗了關注的分離。相反,您可以通過一般方式定義您的操作代碼(例如,擴展AbstractAction
)並將它們與操作ID進行映射。如果你使用AbstractAction
,你可以平凡的屬性映射到action屬性鍵,如Action.NAME
,Action.LONG_DESCRIPTION
等
現在你已經在解析XML轉化爲行動的對象列表,並在這裏談到的第二個問題:你如何展示他們?
JList
(per @Fabio)確實是最有效的方法。它比一大堆單獨的按鈕更加緊湊,但與JComboBox
不同,您可以一次看到多個項目,並且可以輕鬆添加排序/搜索/過濾器。
但是列表不是很靈活。您可以使用自定義ListCellRenderer
來顯示圖標和工具提示(用於說明),但是當您想要對項目進行分組時,您會開始拉伸它。
我認爲最靈活的方法是樹表,它允許你有多層次的層次結構。您可以從2列開始,第一列分層顯示操作名稱,第二列顯示描述。
您可以將表放置在可摺疊面板中,以便在用戶想要關注結果時隱藏它。
Now w.r.t. JToolBar
,你說得對,它是標準的,但正如Fabio的評論指出的那樣,當你在工具欄上有太多按鈕時(如功能區之前的M $ Word),可用性很差。
然而,對於大多數流行的桌面應用程序來說,用戶可以將自己選擇的操作放在工具欄上,這對於工具欄的使用有多大用處。您可以使用「自定義工具欄」對話框,或者只需讓用戶從列表或表格中拖放項目即可。
不幸的是,我在上面提到的許多GUI構造是JDK中可用的而不是。你可以從優秀的商業JIDE圖書館(免責聲明:我不爲他們工作,儘管我有時希望我爲他們工作)找到他們所有人(樹形表,搜索/過濾器,可摺疊面板,可定製的工具欄等),或者你可以找到FOSS的替代品。
用戶單擊按鈕後會發生什麼? – 2010-10-12 22:02:40
@Geoffrey:調用一個長任務的方法(通常是遠程方法),結果顯示在GUI – Cratylus 2010-10-13 05:01:43
OK ...結果的性質是什麼,它是如何顯示的?表?文本區域?我們需要知道您的GUI具體如何幫助您更好地進行設計。 – 2010-10-13 05:26:31