2010-10-12 244 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