我在一个我一直在研究的项目中使用GridBagLayout,问题是当我在我的计算机或其他人的计算机上编译它时,它会正确地显示我想要它。
但是当我在不同的PC上运行它时显示不同,左上方的面板和雷达面板不是它们应该的样子。
我们都使用相同的JDK并使用NetBeans 7.3,因此我不知道问题出在哪里。
这是我用来将面板添加到框架的方法。
private void agregarPaneles() {
this.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(10, 10, 10, 10);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
add(scrollerVuelos, gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
add(panelEstado, gbc);
gbc.gridx = 2;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.gridheight = 1;
add(panelOrdenes, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 3;
gbc.gridheight = 1;
add(panelRadar, gbc);
}
答案 0 :(得分:2)
您发布的代码不足以给您一个确切的答案,但总的来说:
如果GridBagLayout没有足够的空间来显示其首选大小的组件,那么它将使用组件的最小大小。由于许多组件的最小尺寸很小,因此组件几乎不会缩小。
因此,您可能需要查看在面板上设置最小尺寸。您还可以查看weightX和weighty值,因为它们会影响组件的大小调整方式。
阅读How to Use GridBagLayout
上的Swing教程,了解更多信息和示例。
另外请记住,如果使布局更容易,您可以使用具有不同布局管理器的嵌套面板。例如,主要布局可能是BorderLayout。然后在NORTH中使用GridLayout添加面板。在CENTER中添加其他面板。
答案 1 :(得分:2)
组件的首选大小可能不适合框架的可用空间,GridBagLayout
正在恢复使用组件最小尺寸。
您可以使用GridBagConstraints#weightx
和GridBagConstraints#weighty
以及GridBagConstraints#fill = GridBagConstraints.BOTH
来尝试强制组件使用其所在单元格的整个可用空间
您还应该使用Frame#pack
来打包框架,而不是手动设置它的大小,这将尝试框架的大小,以便它可以满足内容首选大小的要求