0

我在我一直在做的一个项目中使用 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);

}
4

2 回答 2

2

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

如果 GridBagLayout 没有足够的空间以首选尺寸显示组件,它将使用组件的最小尺寸。由于许多组件的最小尺寸很小,因此组件可以缩小到几乎没有。

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

阅读 Swing 教程以How to Use GridBagLayout获取更多信息和示例。

还要记住,如果这样可以使布局更容易,您可以将嵌套面板与不同的布局管理器一起使用。例如,主布局可能应该是 BorderLayout。然后在 NORTH 中使用 GridLayout 添加一个面板。在中心添加您的其他面板。

于 2013-10-20T20:08:34.413 回答
2

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

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

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

于 2013-10-20T20:57:01.007 回答