Java GridBagLayout正在调整自身外部对象的大小

Java GridBagLayout正在调整自身外部对象的大小,java,swing,layout-manager,gridbaglayout,Java,Swing,Layout Manager,Gridbaglayout,我正在使用GridBagLayout作为我程序的一部分。当我将接口的这一部分添加到程序中时,它会调整接口其余部分的大小,使其看起来很愚蠢 这里是一个并排的界面,添加和不添加网格包布局 如您所见,将网格包布局对象添加到界面会调整框架中其他对象的大小 下面是我希望的界面外观: (我在MS Paint中非常快速地实现了这一点,而不是使用代码。) 我是否需要将整个界面切换到GridBag布局,或者是否可以不切换到GridBag布局?问题不在于GridBag布局 问题在于您在父面板(在我看来,您可能正

我正在使用
GridBagLayout
作为我程序的一部分。当我将接口的这一部分添加到程序中时,它会调整接口其余部分的大小,使其看起来很愚蠢

这里是一个并排的界面,添加和不添加网格包布局

如您所见,将网格包布局对象添加到界面会调整框架中其他对象的大小

下面是我希望的界面外观:

(我在MS Paint中非常快速地实现了这一点,而不是使用代码。)


我是否需要将整个界面切换到GridBag布局,或者是否可以不切换到GridBag布局?

问题不在于GridBag布局

问题在于您在父面板(在我看来,您可能正在使用GridLayout)和框架左侧使用的面板上使用的布局管理器

问题在于右侧面板的首选高度大于左侧面板的首选高度。然后,您正在使用的布局管理器将向左侧面板上的所有构件添加额外高度。同样,您没有告诉我们您使用的是什么布局管理器,但我猜是GridLayout还是BoxLayout,而布局管理器正在调整组件的大小以填充额外的可用空间

因此,解决方案是更有效地使用布局管理器

因此,我将保留框架的默认边界布局,然后您的基本逻辑如下:

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);

现在,左面板的首选高度将受到包装面板的重视。因此,即使右侧面板更大,组件也不会被拉伸。

为了更快地获得更好的帮助,请添加一个or。”下面是我希望界面看起来的样子:“看起来像垃圾。你为什么要做这么恐怖的东西?它没有空白,因此看起来很拥挤。按钮应位于标签/字段组合下方的中心位置。
级别1:
尽管9个标签/字段组合应该在同样居中的标签下方居中。边栏:这看起来应该出现在对话框或选项窗格中;然后使用像素设置窗口/面板/框架/中的位置,在Mac、windows和Ubuntu/上运行良好linux@tgkprog:如果字体指标在不同平台之间存在差异或将来发生变化,该怎么办?@tgkprog这是一个糟糕的建议。Swing设计用于布局管理器。这里绝对没有理由不能使用布局管理器的正确组合。