Java GridBagLayout 正在调整自身外部对象的大小
Java GridBagLayout is resizing objects outside of itself
我的部分程序使用 GridBagLayout
。当我将界面的这一部分添加到程序中时,它会调整界面其余部分的大小并使其看起来很傻。
这是添加和未添加网格包布局的界面并排图。
如您所见,将网格包布局对象添加到界面会调整框架中其他对象的大小。
下面是我希望界面的样子:
(我在 MS Paint 中非常快速地完成了这个,而不是使用代码。)
我是否需要将整个界面切换为网格包布局,或者是否可以不这样做?
问题不在于 GridBagLayout。
问题在于您在父面板(在我看来您可能正在使用 GridLayout)和框架左侧部分使用的面板上使用的布局管理器。
问题是右侧面板的首选高度大于左侧面板的首选高度。您正在使用的布局管理器随后将额外的高度添加到左侧面板上的所有组件。同样,您没有告诉我们您使用的是什么布局管理器,但我猜是 GridLayout 或 BoxLayout,并且布局管理器正在调整组件的大小以填充额外的 space 可用空间。
所以解决方案是更有效地使用布局管理器。
所以我会保留框架的默认 BorderLayout,然后您的基本逻辑将类似于:
JPanel rightPanel = new JPanel(); // use your GridBagLayout.
frame.add(rightPanel, BorderLayout.CENTER);
JPanel leftPanel = new JPanel(); // use you current layout
JPanel wrapper = new JPanel(new BorderLayout());
wrapper.add(leftPanel, BorderLayout.PAGE_START);
frame.add(wrapper, Border.LINE_START);
现在,包装面板将遵循 leftPanel 的首选高度。所以即使rightPanel更大,组件也不会被拉伸
我的部分程序使用 GridBagLayout
。当我将界面的这一部分添加到程序中时,它会调整界面其余部分的大小并使其看起来很傻。
这是添加和未添加网格包布局的界面并排图。
如您所见,将网格包布局对象添加到界面会调整框架中其他对象的大小。
下面是我希望界面的样子:
(我在 MS Paint 中非常快速地完成了这个,而不是使用代码。)
我是否需要将整个界面切换为网格包布局,或者是否可以不这样做?
问题不在于 GridBagLayout。
问题在于您在父面板(在我看来您可能正在使用 GridLayout)和框架左侧部分使用的面板上使用的布局管理器。
问题是右侧面板的首选高度大于左侧面板的首选高度。您正在使用的布局管理器随后将额外的高度添加到左侧面板上的所有组件。同样,您没有告诉我们您使用的是什么布局管理器,但我猜是 GridLayout 或 BoxLayout,并且布局管理器正在调整组件的大小以填充额外的 space 可用空间。
所以解决方案是更有效地使用布局管理器。
所以我会保留框架的默认 BorderLayout,然后您的基本逻辑将类似于:
JPanel rightPanel = new JPanel(); // use your GridBagLayout.
frame.add(rightPanel, BorderLayout.CENTER);
JPanel leftPanel = new JPanel(); // use you current layout
JPanel wrapper = new JPanel(new BorderLayout());
wrapper.add(leftPanel, BorderLayout.PAGE_START);
frame.add(wrapper, Border.LINE_START);
现在,包装面板将遵循 leftPanel 的首选高度。所以即使rightPanel更大,组件也不会被拉伸