JFrame 和 JPanel 调整大小问题
JFrame & JPanel sizing issue
我正在尝试编写包含 JPanel 的 JFrame。在 JPanel 中是一个 JTextField 的数组。所以,我的 GUI 看起来像:-
我没有使用布局管理器,并且已将 JFrame 和 JPanel 的此项设置为 null。我正在手动调整这些组件的大小。
您可以看到 JPanel 的右侧部分被切掉了,尽管我使用了与包含 JFrame 相同的大小。
代码如下:-
我通过将 JTextField 数组中的列数乘以 JTextField 的宽度计算出 JPanel 所需的宽度。除此之外,还需要添加 JTextFields 之间每个间隙的宽度(其中会有 (columnNumber - 1)),以及两个边框间隙。
我已经这样做了,但是右手边的边框间隙被切掉了,如图所示。
如果我在 panelWidth 中添加一些随机值,那么您可以看到右侧的间隙,但我的问题是我在这里遗漏了什么?如果 JFrame 端和 JPanel 大小相同,这应该可以正常工作,因为我也将它们都打印出来,并且打印输出给出相同的数字。
杰里米
该 GUI 的顶部非常适合网格布局,底部带有 'Go / Cancel' 按钮 - 流式布局。将网格布局放在边框布局的 CENTER
中,将流式布局放在 PAGE_END
中,打包顶级容器(对于非裁剪,'right size')&工作完成。
最终可能看起来像这样:
I want for any combination of row/column values to allow a constant vertical & horizontal distance between each JTextField, and for each of those text fields to maintain default sizing.
GridLayout 允许您指定每个组件之间的 horizontal/vertical 间隙并允许您控制网格的大小。
然后您可以使用 GridLayout 将面板包裹在符合网格大小的面板中。
例如你可以这样做:
JPanel grid = new JPanel( new GridLayout(...) );
JPanel wrapper = new JPanel( new GridBagLayout() );
wrapper.add(grid, new GridBagConstraints());
frame.add(wrapper, BorderLayout.CENTER);
如果您打包框架,网格面板将以首选大小显示。
如果您调整框架的大小,网格面板将在包装面板中保持居中。
我正在尝试编写包含 JPanel 的 JFrame。在 JPanel 中是一个 JTextField 的数组。所以,我的 GUI 看起来像:-
我没有使用布局管理器,并且已将 JFrame 和 JPanel 的此项设置为 null。我正在手动调整这些组件的大小。
您可以看到 JPanel 的右侧部分被切掉了,尽管我使用了与包含 JFrame 相同的大小。
代码如下:-
我通过将 JTextField 数组中的列数乘以 JTextField 的宽度计算出 JPanel 所需的宽度。除此之外,还需要添加 JTextFields 之间每个间隙的宽度(其中会有 (columnNumber - 1)),以及两个边框间隙。
我已经这样做了,但是右手边的边框间隙被切掉了,如图所示。
如果我在 panelWidth 中添加一些随机值,那么您可以看到右侧的间隙,但我的问题是我在这里遗漏了什么?如果 JFrame 端和 JPanel 大小相同,这应该可以正常工作,因为我也将它们都打印出来,并且打印输出给出相同的数字。
杰里米
该 GUI 的顶部非常适合网格布局,底部带有 'Go / Cancel' 按钮 - 流式布局。将网格布局放在边框布局的 CENTER
中,将流式布局放在 PAGE_END
中,打包顶级容器(对于非裁剪,'right size')&工作完成。
最终可能看起来像这样:
I want for any combination of row/column values to allow a constant vertical & horizontal distance between each JTextField, and for each of those text fields to maintain default sizing.
GridLayout 允许您指定每个组件之间的 horizontal/vertical 间隙并允许您控制网格的大小。
然后您可以使用 GridLayout 将面板包裹在符合网格大小的面板中。
例如你可以这样做:
JPanel grid = new JPanel( new GridLayout(...) );
JPanel wrapper = new JPanel( new GridBagLayout() );
wrapper.add(grid, new GridBagConstraints());
frame.add(wrapper, BorderLayout.CENTER);
如果您打包框架,网格面板将以首选大小显示。
如果您调整框架的大小,网格面板将在包装面板中保持居中。