布局问题 - Java

时间:2013-10-20 20:01:30

标签: java swing layout-manager gridbaglayout

我在一个我一直在研究的项目中使用GridBagLayout,问题是当我在我的计算机或其他人的计算机上编译它时,它会正确地显示我想要它。

Proper way

但是当我在不同的PC上运行它时显示不同,左上方的面板和雷达面板不是它们应该的样子。

Wrong way

我们都使用相同的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);

}

2 个答案:

答案 0 :(得分:2)

您发布的代码不足以给您一个确切的答案,但总的来说:

如果GridBagLayout没有足够的空间来显示其首选大小的组件,那么它将使用组件的最小大小。由于许多组件的最小尺寸很小,因此组件几乎不会缩小。

因此,您可能需要查看在面板上设置最小尺寸。您还可以查看weightX和weighty值,因为它们会影响组件的大小调整方式。

阅读How to Use GridBagLayout上的Swing教程,了解更多信息和示例。

另外请记住,如果使布局更容易,您可以使用具有不同布局管理器的嵌套面板。例如,主要布局可能是BorderLayout。然后在NORTH中使用GridLayout添加面板。在CENTER中添加其他面板。

答案 1 :(得分:2)

组件的首选大小可能不适合框架的可用空间,GridBagLayout正在恢复使用组件最小尺寸。

您可以使用GridBagConstraints#weightxGridBagConstraints#weighty以及GridBagConstraints#fill = GridBagConstraints.BOTH来尝试强制组件使用其所在单元格的整个可用空间

您还应该使用Frame#pack来打包框架,而不是手动设置它的大小,这将尝试框架的大小,以便它可以满足内容首选大小的要求