JFrame和JPanel大小调整问题

时间:2018-10-07 10:03:07

标签: java swing user-interface layout-manager null-layout-manager

我正在尝试编写包含JPanel的JFrame。在JPanel中是JTextField的数组。因此,我的GUI看起来像:-

enter image description here

我没有使用布局管理器,并且已将JFrame和JPanel设置为null。我正在手动调整这些组件的大小。

即使我使用与包含的JFrame相同的大小,也可以看到JPanel的右侧部分被切掉了。

代码显示如下:-

enter image description here

我已经通过将JTextField数组中的列数乘以JTextField的宽度来计算JPanel的所需宽度。除此之外,还需要添加JTextFields之间的每个间隙的宽度(其中有(columnNumber-1))以及两个边界间隙。

我已经这样做了,但是如右图所示,右侧的边框间隙被切掉了。

如果我在panelWidth中添加一些随机量,那么您可以在其中看到右侧的间隙,但是我的问题是我在这里缺少什么?如果JFrame端和JPanel大小相同(就像我也将它们都打印出来一样,并且打印输出给出相同的数字),那么这应该可以正常工作。

杰里米

2 个答案:

答案 0 :(得分:2)

  

我希望对行/列值进行任意组合,以使每个JTextField之间的垂直和水平距离保持恒定,并希望每个文本字段都保持默认大小。

GridLayout允许您在每个组件之间指定水平/垂直间隙,并可以控制网格的大小。

然后,您可以在尊重网格大小的面板中使用GridLayout包裹面板。

例如,您可以这样做:

JPanel grid = new JPanel( new GridLayout(...) );

JPanel wrapper = new JPanel( new GridBagLayout() );
wrapper.add(grid, new GridBagConstraints());

frame.add(wrapper, BorderLayout.CENTER);

如果打包框架,网格面板将以首选尺寸显示。

如果调整框架的大小,则网格面板将保持在包装面板的中心。

答案 1 :(得分:1)

该GUI的顶部非常适合于网格布局,底部带有“执行/取消”按钮-流程布局。将网格布局放置在边框布局的CENTER中,将流程布局放置在PAGE_END中,打包顶层容器(对于未裁剪的“正确大小”),然后完成工作。 / p>

它可能最终看起来像这样:

enter image description here