有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java GridBagLayout是否需要空单元格的占位符面板?

我制作了一个简单的GridBagLayout,在单元格(0,0)、(1,0)和(0,1)中添加按钮

JPanel panelMain = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
    c.gridx = 0;
    c.gridy = 0;
    panelMain.add(new JButton("0,0"),c);

    c.gridx = 1;
    c.gridy = 0;
    panelMain.add(new JButton("1,0"),c);

    c.gridx = 0;
    c.gridy = 1;
    panelMain.add(new JButton("0,1"),c);

我很高兴看到结果UI:

Desired result

我想在未连接到现有单元格的单元格中添加JButton。我希望它被一个空的空间隔开。当我尝试这个方法时,新的JButton被集中在其他的旁边。以下是补充内容:

JPanel panelMain = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
    c.gridx = 0;
    c.gridy = 0;
    panelMain.add(new JButton("0,0"),c);

    c.gridx = 1;
    c.gridy = 0;
    panelMain.add(new JButton("1,0"),c);

    c.gridx = 0;
    c.gridy = 1;
    panelMain.add(new JButton("0,1"),c);

    c.gridx = 3;
    c.gridy = 0;
    panelMain.add(new JButton("3,0"),c);

输出:

Undesired result

在细胞(2,0)处显示JButton("3,0")。我是否需要在单元格(2,0)中使用空的JPanel作为占位符?更重要的是,为什么会发生这种情况


共 (2) 个答案

  1. # 1 楼答案

    布局不知道在2,0处应保留的宽度,除非在gridx = 2中放置了一个组件。当您完成UI时,如果放置了任何组件,它应该看起来很好。例如:

    enter image description here

    在其他情况下,您可以将背景色匹配的空JPanel添加到容器的背景色中

  2. # 2 楼答案

    Do I need to use an empty JPanel as a place holder in the cell (2,0)?

    可以使用“插入”栅格袋约束来提供零部件之间的空间。阅读How to Use GridBagLayout上的Swing教程,了解有关插入约束的更多信息

    或者,如果您想要一个占位符,那么您可以使用Box.createHorizontalStrut(...)来轻松地指定宽度

    More importantly, why is this happening?

    除非单元中有组件,否则单元没有大小。每个单元彼此独立,所以您希望单元(2,0)的大小是多少