是否有可能动态生成体面的属性对话框?

时间:2010-02-09 12:58:18

标签: java user-interface swing properties dialog

我有一个应用程序,它显示各种GUI可访问对象的属性对话框。因为存在大量不同类型的对象,所以还存在大量不同的属性对话框。因为我们很懒,所以我们不想手工构建每个属性对话框;另外,插件可能会引入新类型的对象,这些对象也需要属性对话框,如果插件设计者不需要手动编写属性对话框(也可以保存它们的工作,并确保结果是统一的),这将是很好的。 )。相反,我们构建了一个框架,将这些对象的属性映射到GUI组件(例如,复选框,文本字段,组合框),然后将它们全部打包到对话框中。这样做的好处是我们不需要为构建对话框做任何工作,但是对话框看起来我们没有做任何工作来解决它们:它们看起来像堆栈的Jenga块。这些对话框令人尴尬。

所以,我的问题是:有没有办法自动布局属性对话框,所以它们看起来不那么难看? (我意识到答案可能是“不”,但也可能是我们在思考更好的方法时没有足够的创造力。)NB:我们正在使用Java Swing,但实际上问题本身与语言无关。

5 个答案:

答案 0 :(得分:2)

有很多GUI框架具有“属性视图”的“解决方案”,您可能希望在重新发明轮子之前查看它们。如果你已经看过他们并认为他们很糟糕,我道歉:)

以下是JIDE的PDF,其中还显示了NetBeans和JBuilder。

答案 1 :(得分:2)

我会把我的投票称为“不”,至少对于“自动”和“看起来不那么丑陋”的充分歧视定义。

这绝对是一个普遍的问题:我认为至少有三位同事在去年就要求这样的事情。不幸的是,我不知道任何自动布局解决方案不需要重要的指导(例如在XUI中指定布局)才能工作。

显然,您可以采取简单的方法使自动生成的组件更容易组合,例如标准化标签和内容的宽度和高度。您可以应用一些可能有用的启发式方法,例如按控件类型对属性进行排序,以便所有组合框一起使用,所有文本字段一起使用等。

然而,良好的GUI布局很难,即使是人类程序员也常常做得很糟糕。这就是为什么我并不感到惊讶,没有人开发出一种通用的自动布局工具,不需要指定有关如何呈现自动生成的控件的大量附加信息。

答案 2 :(得分:0)

我认为你可以使用XUI在XML中提及你的小部件,好的部分是它还允许用XML指定布局。这些正是我推荐使用XUI的地方,虽然他们声称它可以用于构建整个应用程序,我否认。此外,作为Swing的常见xui标准,它也使您的项目更加标准化。

答案 3 :(得分:0)

我建议使用注释来驱动GUI框架。这样,您的后端对象可以声明,例如,哪些属性最重要,应该显示在UI的顶部(或“简单”UI中,或者在选项卡式对话框的第一个选项卡上,或者其他) 。您也可以使用它来覆盖框架中默认提供的自动检测到的窗口小部件,或者声明验证器等等。

有了这种信息,您的框架可以应用各种启发式方法来动态设计更友好的对话框。而且您的插件作者本质上可以设计自己的对话框,至少在广泛的描述中,而无需编写任何UI代码。

答案 4 :(得分:-1)

一个建议:如果您的属性以点分隔的分层格式命名,则可以动态构建JTree来表示各种属性组。当用户点击树中的给定节点时,您可以在单独的JTable JPanel内的JTextField内显示该类别中的属性(例如,作为名称 - 值对)。您还可以通过添加JComboBox来丰富GUI,用户可以在其中搜索属性。

这样,至少你不会在同一个屏幕上显示大量的信息......虽然缺点是你的GUI最终看起来像Regedit: - )

编辑属性时,您可以使用反射来确定属性的类型,从而确定适用的单元格编辑器; e.g。

  • 对于枚举,您可以提供基于JSpinner的编辑器。
  • 对于数值,您可以提供JFormattedTextFieldJCheckBox
  • 对于布尔值,您可以提供基于{{1}}的编辑器。