2010-10-12 245 views
0

我對GUI具有以下要求,即用戶將有多個可執行的操作。
目前,它實現了一系列用戶按下的JButton。
但是這些行爲很多,並且在每個版本中可能會提供更多的「行動」。
我不確定在GUI中如何更好地呈現/完成。
我讀過,有一些方法可以在xml文件中形成一個描述相關信息的gui。
我正在使用Netbeans和swing。 xml是一個好主意,用於描述可用的操作,例如創建相同數量的按鈕?如果是的話,我將如何開始呢?此外,jtoobar會是一個好主意嗎?我的意思是在Jtoolbar中添加儘可能多的按鈕。
我想這是一個普遍的問題,但我沒有經驗的圖形用戶界面。 任何幫助,將不勝感激!java-gui通過描述文件創建方法?

謝謝。

+0

用戶單擊按鈕後會發生什麼? – 2010-10-12 22:02:40

+0

@Geoffrey:調用一個長任務的方法(通常是遠程方法),結果顯示在GUI – Cratylus 2010-10-13 05:01:43

+0

OK ...結果的性質是什麼,它是如何顯示的?表?文本區域?我們需要知道您的GUI具體如何幫助您更好地進行設計。 – 2010-10-13 05:26:31

回答

1

似乎有涉及兩個問題:

  1. 如何描述和造就了一大批的行動?
  2. 如何在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將映射到唯一的操作命令。你可以任何你想要的方式顯示descriptionicon(我想你已經使用過圖標了)。您也可以使用助記符,加速器等其他屬性,此時使用XML開始付清:您可以添加所需的任意屬性。

XML中的一個明顯的缺失是實際的操作本身。我做不是認爲你應該把Java代碼放在XML中。它擊敗了關注的分離。相反,您可以通過一般方式定義您的操作代碼(例如,擴展AbstractAction)並將它們與操作ID進行映射。如果你使用AbstractAction,你可以平凡的屬性映射到action屬性鍵,如Action.NAMEAction.LONG_DESCRIPTION


現在你已經在解析XML轉化爲行動的對象列表,並在這裏談到的第二個問題:你如何展示他們?

JList(per @Fabio)確實是最有效的方法。它比一大堆單獨的按鈕更加緊湊,但與JComboBox不同,您可以一次看到多個項目,並且可以輕鬆添加排序/搜索/過濾器。

但是列表不是很靈活。您可以使用自定義ListCellRenderer來顯示圖標和工具提示(用於說明),但是當您想要對項目進行分組時,您會開始拉伸它。

我認爲最靈活的方法是樹表,它允許你有多層次的層次結構。您可以從2列開始,第一列分層顯示操作名稱,第二列顯示描述。

您可以將表放置在可摺疊面板中,以便在用戶想要關注結果時隱藏它。

Now w.r.t. JToolBar,你說得對,它是標準的,但正如Fabio的評論指出的那樣,當你在工具欄上有太多按鈕時(如功能區之前的M $ Word),可用性很差。

然而,對於大多數流行的桌面應用程序來說,用戶可以將自己選擇的操作放在工具欄上,這對於工具欄的使用有多大用處。您可以使用「自定義工具欄」對話框,或者只需讓用戶從列表或表格中拖放項目即可。

不幸的是,我在上面提到的許多GUI構造是JDK中可用的而不是。你可以從優秀的商業JIDE圖書館(免責聲明:我不爲他們工作,儘管我有時希望我爲他們工作)找到他們所有人(樹形表,搜索/過濾器,可摺疊面板,可定製的工具欄等),或者你可以找到FOSS的替代品。

+0

非常感謝!有些問題:1)關於不屬於JDK的構造,你如何看待swingx?我應該嘗試還是避免它?似乎有你所有的建議。 2)關於treetable的建議:爲什麼我需要2列?通常,如果按鈕上的文本(或圖標)在使用上不明確,則使用工具提示。可用於jlist中的treetable的好處是什麼可摺疊的pannel,我沒有得到。使GUI更漂亮? 3)如何將id與我的實際類映射到運行時調用?通過第二個文件或通過代碼?我之前沒有這樣做過,但我不確定。 – Cratylus 2010-10-15 05:59:16

+0

如果我只使用一個可摺疊的面板和一個樹形表,是否值得爲兩個組件包含一個第三方庫?這是通常在GUI項目中還是我應該嘗試自己創建它們?您是否有建議一個FOSS替代品? – Cratylus 2010-10-15 06:03:39

+0

@OP:1)我沒有使用SwingX,但我無法想象爲什麼你想避免它。 2)我說樹形表是最靈活的。您當然可以使用列表或樹,但通過樹表可以添加更多列,例如一個顯示進度條。 3)您仍然需要對可用操作進行硬編碼,因爲XML沒有操作代碼。但是,如果您的操作代碼是一致的並且可以抽象出來,例如它總是從樹節點獲取一些數據,然後使用該數據將特定命令發送到服務器,那麼您也可以將它們放在XML中。 (或者你甚至可以使用Jython ...) – 2010-10-15 21:58:00

1

我不知道我是否理解你的問題,但在我看來,JButton方法並不是最有效的方法來做這樣的事情。想象一下,動作的數量開始變得非常大,繪製太多的按鈕會導致一個不直觀且不具吸引力的界面。另一種方法是使用JComboBox或JList,列出所有不需要太多空間並且只有一個按鈕「do!」的動作。執行該操作。

我希望這是有益的;)

+0

這是一個不錯的主意。但是我沒有看到太多的GUI使用這種方法,或者我錯了嗎?通常不是首選的工具欄? – Cratylus 2010-10-13 05:05:12

+0

這只是一種做事情的方式,我還沒有見過那麼多,但這是一個我覺得很有趣的概念。這取決於你要採取的行動的數量,如果他們很少,那麼按鈕/工具欄的方法似乎合理,但對於大量的行動(這意味着大量的按鈕),這不是最好的方式,在我的意見,因爲界面變得越來越混亂和無空間。使用JList或JComboBox(我更喜歡JList),使事情更加緊湊和有組織。 – Fabio 2010-10-13 22:00:06

0

相反周圍十年前流行的觀念,XML通常不是一個好主意。表達這種「編程」的適當語言是Java。

+0

爲什麼不是xml?這也意味着對於任何新的操作,GUI都必須重新創建並重新發布,對嗎?我將如何處理下一個版本中添加的10個新操作?再添加10個JButtons? – Cratylus 2010-10-13 05:03:42

+0

另外當你用Java來表達這種編程的適當語言時,你的意思是什麼?創建JButtons? – Cratylus 2010-10-13 05:15:23