有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java布局管理器可以生成几个JPanel吗?

我必须构建一个包含许多控件的相当大的表单。控件分为基本控件/设置和扩展控件/设置。用户可以决定只查看基本控件还是同时查看基本控件和扩展控件

我已经将所有扩展控件放到了它们自己的JPanel上,这样我就可以通过显示或隐藏此面板在两个视图之间轻松切换

目前我使用的是GroupLayout,不同面板上的控件未对齐:

Label aaa:     Text field
Label a:       Text field
Label aaaaaa:  Text field
----------------------------
Label b:    Text field
Label bbb:  Text field
Label bb:   Text field

不幸的是,我现在找到了“同步”两个面板布局的方法(除了使用绝对布局和固定控制坐标)

  • 有没有办法做到这一点
  • 我的整个设计有缺陷吗

编辑:如果可能,我希望保留GroupLayout管理器


共 (6) 个答案

  1. # 1 楼答案

    您可以使用GridLayout而不是GroupLayout,这将使列之间的间距均匀

  2. # 2 楼答案

    这就是thGridLayout的解释。这会将每个组件设置为您期望的大小。通过GridData对象,可以指定组件的排序方式

    Examples

    alt text
    (来源:sun.com

  3. # 3 楼答案

    如果要将它们保存在具有单独布局的单独面板中:

    迭代添加的所有标签,并找到每个标签的最大首选宽度。 重复第二次,并将首选大小设置为每个标签的首选高度,但最大宽度

  4. # 4 楼答案

    据我所知,任何Swing LayoutManager(来自JRE或开源)都不能跨越多个面板

    我目前正在为我的DesignGridLayout项目开发这样一个功能(我称之为“布局同步”),但它并不容易实现(我大约在两周前就开始了,我仍然不知道我是否以及何时会得到一些有趣的东西,但我仍然对它抱有很高的希望;-)

    您可以选择的一个选项是将所有组件添加到同一个面板(当时只有一个GroupLayout),并根据用户的选择隐藏/显示它们。希望GroupLayout能够根据情况调整大小(在调用pack()之后)

    如果GroupLayout运行良好,那么每次用户更改其选择以显示/隐藏扩展字段后,只需调用pack()

    否则,每次用户更改其选择时,您都必须手动设置面板的大小

  5. # 5 楼答案

    我认为用标准的布局管理器是无法做到这一点的。您可能需要编写自己的布局管理器,但如果将GroupLayout子类化,应该不会太难

  6. # 6 楼答案

    可能最简单(好)的方法是将所有组件添加到主面板。将子面板设置为非不透明,并将子面板也添加到主面板。主面板需要关闭优化图纸

    另一种技术是添加间隔组件。在底部面板中,添加一个与标签位于同一列的组件,该组件将从顶部标签动态获取其各种尺寸方法的宽度组件。按与顶部面板相反的顺序进行操作