java - 正确的 Swing 设计

标签 java swing user-interface layout

我听说将相同级别的组件放在另一个相同级别的组件之上是不好的做法。

在本例中我谈论的是 JPanel。目前,我将所有内容划分为单独的 JPanel,其中每个 JPanel 都有自己的布局,然后将它们添加到主内容 Pane (JPanel)。我觉得这种方式比配置一个适用于我的所有组件的布局要容易得多,这些组件可以遍布各处。我的逻辑有问题吗?

最佳答案

将面板放在面板内并没有什么问题。但是,如果您要做很​​多这样的事情,您可能需要考虑一个布局管理器(我最喜欢的是 MiGLayout ),它支持相当复杂的控件排列,而无需使用大量嵌套面板。

最终,使用一种可以让您更轻松地维护代码的组合。如果您有一组彼此独立的控件,那么将它们放在单独的面板中是很好的设计 - 它允许您将该面板拆分出来(用于测试,甚至用于 UI 中的创意窗口)。如果控件集本质上相互关联,请考虑使用具有高级布局管理器的单个面板。

在某些情况下,两个面板之间会有少量绑定(bind)(典型示例是一个面板带有列表,另一个面板带有列表中所选项目的详细 View )。在这种情况下,我通常使用两个单独的面板和两个单独的演示模型,然后将一个模型中当前选定的项目绑定(bind)到检查器面板的父级。但是,如果您发现您正在使用多个面板中的值进行验证、数据存储等操作...那么您可能会将内容拆分为太多面板。

这些年来我已经做了很多这样的事情,我所确定的立场是沿着支持 View 的底层表示模型的逻辑线来构建我的 UI。我很少让 UI 布局驱动我使用多少个面板,等等... - MigLayout(我确信还有其他布局)甚至可以使复杂的 UI 布局变得相当简单,并且最好为它设计类 View 和模型的方式使代码更易于测试和维护。

关于java - 正确的 Swing 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12273700/

相关文章:

c++ - 我在尝试旋转图像时看到伪像

java - 扩展 MultipleSelectionModel 的 JFX ComboBox UI

java - 在Java中仅使用加法进行指数运算

java - 如何在 JFrame 中显示不同的组件?

JavaFX 硬焦点丢失在其他窗口区域单击

java - JOptionPane 标题栏图标

Java swing 将多个文本字段保存到一个对象中

java - 是否可以检索引用同名字符串的值?

java - Kryo 中的自动类(class)注册

java - Robotium:如何在继续之前等待加载完成?