似乎有涉及两个问题:
- 如何描述和造就了一大批的行动?
- 如何在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