代码之家  ›  专栏  ›  技术社区  ›  uckelman

是否可以动态生成外观良好的属性对话框?

  •  2
  • uckelman  · 技术社区  · 15 年前

    我有一个应用程序,它显示各种图形用户界面可访问对象的属性对话框。因为有大量不同种类的对象,所以也有大量不同的属性对话框。因为我们很懒惰,我们不想手工构建每一个属性对话框;另外,插件可能会引入新类型的对象,这些对象也需要属性对话框,如果插件设计者也不需要手工编写属性对话框(两者都是为了保存它们的工作,并确保结果是一致的),那就更好了。相反,我们构建了一个框架,将这些对象的属性映射到GUI组件(例如,复选框、文本字段、组合框),然后将它们全部打包到一个对话框中。这样做的好处是,我们不需要为构建对话框而做任何工作,但是这些对话框看起来也像是我们没有将任何工作放在布局中:它们看起来像是一堆积木。这些对话很难看。

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

    5 回复  |  直到 15 年前
        1
  •  2
  •   Joe Carnahan    15 年前

    我将把我的投票定为“不”,至少对“自动”和“别看起来那么丑陋”的定义有足够的区别。

    这绝对是一个常见的问题:仅去年一年,我想我的至少三个同事就提出过类似的要求。不幸的是,我不知道任何自动布局解决方案都不需要重要的指导(例如在XUI中指定布局)才能工作。

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

    然而,好的图形用户界面布局是很困难的,即使是人类程序员也常常表现得很差。这就是为什么没有人开发出一个通用的自动布局工具,不需要指定很多关于如何显示自动生成的控件的附加信息,我对此并不感到惊讶。

        2
  •  2
  •   willcodejavaforfood    15 年前

    有很多GUI框架为“属性视图”提供了“解决方案”,在重新发明控制盘之前,您可能想看看它们。如果你已经看到了他们并且认为他们很差劲,我道歉:)

    这里是一个 PDF 对于Jide One,它也显示了NetBeans和JBuilder。

        3
  •  0
  •   Suraj Chandran    15 年前

    我想你可以用 XUI 提到XML中的小部件,很好的一点是它还允许指定XML中的布局。这些正是我推荐使用XUI的地方,尽管他们声称XUI可以用于构建整个应用程序,我否认。同时,作为Swing的一个常见的Xui标准,它也使您的项目更加标准化。

        4
  •  0
  •   Matt McHenry    15 年前

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

    有了这类信息,您的框架就可以应用各种启发式方法来动态地设计更友好的对话框。而且,您的插件作者基本上可以设计自己的对话框,至少是用大笔画,而不必编写任何UI代码。

        5
  •  -1
  •   Adamski    15 年前

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

    这样,至少你不会在同一个屏幕上显示大量信息…尽管缺点是,您的GUI最终看起来像regedit:-)

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

    • 对于Enums,您可以提供一个 JComboBox 基于编辑器。
    • 对于数值,您可以提供 JSpinner JFormattedTextField .
    • 对于布尔值,可以显示 JCheckBox 基于编辑器。
    推荐文章