Java 网格布局填充
我正在使用Java 网格布局填充,java,swing,user-interface,gridbaglayout,Java,Swing,User Interface,Gridbaglayout,我正在使用GridBagLayout来(当前)显示两行。我知道这个布局对于这项任务来说太过了,但我正在努力学习如何使用它。问题是,我将两个面板添加到了两个单独的行中,内容周围有一个巨大的间隙(请参见下图和代码): 使用 对于weightx/weighty来说: 指定如何分配额外的水平/垂直空间 对于填充: 当零部件的显示区域较大时,使用此字段 大于组件请求的大小。它决定是否 调整组件大小,如果是,如何调整 不幸的是,使用GridBagLayout,如果内容没有填满它所在的整个容器,它会自动将所
GridBagLayout
来(当前)显示两行。我知道这个布局对于这项任务来说太过了,但我正在努力学习如何使用它。问题是,我将两个面板添加到了两个单独的行中,内容周围有一个巨大的间隙(请参见下图和代码):
使用
对于weightx
/weighty
来说:
指定如何分配额外的水平/垂直空间
对于填充:
当零部件的显示区域较大时,使用此字段
大于组件请求的大小。它决定是否
调整组件大小,如果是,如何调整
不幸的是,使用GridBagLayout
,如果内容没有填满它所在的整个容器,它会自动将所有内容放在容器的中心。这就是为什么你会有很大的差距
基本上有两种方法可以解决此问题:
困难的方法:摆弄网格约束
。当我试图避免集中注意力的行为时,这方面的成功是有限的
简单的方法是:将GridBagLayout
放在FlowLayout
的内部,然后将FlowLayout
的对齐方式设置为左上角,或者任何您想要的方式
上周的某个时候,我问过自己,也回答过自己
因此,在您的示例中,您将使用GridBagLayout
将panel1
和middlePanel
直接添加到JFrame(?)
JFrame (GridBagLayout)
- panel1
- middlePanel
我建议采用这种替代结构,以消除所有额外的空间(以及中心对齐,如果您愿意)
HTH您也不能像那样重用约束。您需要为第二个面板创建一个新实例。-1此答案不正确。您需要做的是在GridBagConstraints上设置weightx和weighty属性。两者的默认值均为0.0,这将导致所有内容都“居中”,因为您接受了错误的answer@willcodejavaforfood我不同意:当有两种方法可以完成同一件事时,你不能认为两者都起作用时,其中一种是错误的。请注意,我确实承认使用GridBagConstraints
可以实现这一点,只是我更喜欢另一种选择。
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 1d;
constraints.weighty = 1d;
JFrame (GridBagLayout)
- panel1
- middlePanel
JFrame (FlowLayout)
- JPanel (GridBagLayout)
- panel1
- middlePanel