我有两个桌子和两个按钮。我希望表格1位于第一列,并且宽度最大为3个单位,然后我希望表格右侧的两个按钮更窄(宽度为1个单位),我希望按钮1位于顶部,按钮2位于上方底部。现在在这些按钮的右侧,我希望另一个表(表2)再次宽至3个单位。为此,我使用了以下约束:

        //table1
        c = new GridBagConstraints(0, 0, 3, 2, 1, 1,
                GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
                new Insets(0, 0, 0, 0), 0, 0);
        c.fill = GridBagConstraints.BOTH;
        outerPanel.add(all_app_scrollpane, c);

        //button1
        c = new GridBagConstraints(3, 0, 1, 1, 1, 1,
                GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
                new Insets(0, 0, 0, 0), 0, 0);
        outerPanel.add(addButton, c);

        //button2
        c = new GridBagConstraints(3, 1, 1, 1, 1, 1,
                GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
                new Insets(0, 0, 0, 0), 0, 0);
        outerPanel.add(removeButton, c);

        //table2
        c = new GridBagConstraints(4, 0, 3, 2, 1, 1,
                GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
                new Insets(0, 0, 0, 0), 0, 0);
        c.fill = GridBagConstraints.BOTH;
        outerPanel.add(curr_app_scrollpane, c);

让我们看一下table1的GridBagCOnstraints。据我所知,第一个参数指出它将从0.列开始,并将是3列宽(第三个参数)。
然后button1从第三列开始,将是一列宽。但是我认为我知道一些错误,因为结果与我期望的非常不同。

我希望这些按钮更窄,表格更宽。我怎样才能做到这一点?我想使用GridBag完成此操作,因为这个小面板只是一个非常复杂的GUI的一小部分,整个GUI是使用gridbag设计的。所以我不想更改编码样式。

最佳答案

您必须设置布局的增长设置(权重),以便仅左和右列在增长。

像这样:

    contentPane.setLayout(new GridBagLayout());
    ((GridBagLayout)contentPane.getLayout()).columnWidths = new int[] {0, 0, 0, 0};
    ((GridBagLayout)contentPane.getLayout()).rowHeights = new int[] {0, 0, 10, 0, 0, 0};
    ((GridBagLayout)contentPane.getLayout()).columnWeights = new double[] {1.0, 0.0, 1.0, 1.0E-4};
    ((GridBagLayout)contentPane.getLayout()).rowWeights = new double[] {1.0, 0.0, 0.0, 0.0, 1.0, 1.0E-4};

    //---- leftBtn ----
    leftBtn.setText("left Button");
    contentPane.add(leftBtn, new GridBagConstraints(0, 0, 1, 5, 0.0, 0.0,
        GridBagConstraints.CENTER, GridBagConstraints.BOTH,
        new Insets(0, 0, 0, 0), 0, 0));

    //---- rightBtn ----
    rightBtn.setText("right Button");
    contentPane.add(rightBtn, new GridBagConstraints(2, 0, 1, 5, 0.0, 0.0,
        GridBagConstraints.CENTER, GridBagConstraints.BOTH,
        new Insets(0, 0, 0, 0), 0, 0));

    //---- addBtn ----
    addBtn.setText("add Button");
    contentPane.add(addBtn, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0,
        GridBagConstraints.CENTER, GridBagConstraints.BOTH,
        new Insets(0, 0, 0, 0), 0, 0));

    //---- remBtn ----
    remBtn.setText("rem Button");
    contentPane.add(remBtn, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0,
        GridBagConstraints.CENTER, GridBagConstraints.BOTH,
        new Insets(0, 0, 0, 0), 0, 0));

因此它给出:

问候弗洛里安

编辑:这是来自IDE的屏幕截图,按钮之间有额外的空格:

关于java - Java GridBag布局无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11225511/

10-10 04:18