【问题标题】:gridbadlayout vertical gapsgridbaglayout 垂直间隙
【发布时间】:2011-08-02 00:14:44
【问题描述】:

我正在制作一个带有 som 按钮的面板。

但我希望按钮相互接触,换句话说,我希望垂直间隙消失。但不应调整按钮的大小。我怎样才能继续这样做?

我的代码:

this.setLayout(new GridBagLayout());
    GridBagConstraints constraints = new GridBagConstraints();

    constraints.fill = GridBagConstraints.HORIZONTAL;
    constraints.gridwidth = 2;
    constraints.weightx = 1D;
    constraints.weighty = 1D;
    constraints.gridx = 0;
    constraints.gridy = 0;
    int row = 0;
    for (MainAction actie : mainActions) {
        constraints.gridy = row;
        row++;
        SelectedActionButton but = new SelectedActionButton(selectedActionModel, actie);
        this.add(but, constraints);

    }
    constraints.gridwidth = 1;
    constraints.weightx = 0.5D;
    row *=2;
    for (AbstractAction actie : objectActions) {
        constraints.gridy = row/2;
        constraints.gridx = row%2;
        row++;
        SelectedObjectButton but = new SelectedObjectButton(selectedObjectModel, actie);
        but.setMargin(new Insets(0, 0, 0, 0));
        this.add(but, constraints);
    }

提前致谢

【问题讨论】:

    标签: java user-interface gridbaglayout gaps-in-visuals


    【解决方案1】:

    更改以下行

    constraints.weighty = 1D;
    

    constraints.weighty = 0D;
    

    将解决您的问题。

    更新:要将所有按钮向北对齐,您可以在最后一行添加一个额外的组件,占用所有可用空间:

    constraints.weighty = 1D;
    constraints.gridy = row;
    this.add(Box.createGlue(), constraints);
    

    【讨论】:

    • 哦,是的,这似乎可行 :D 现在只有一个问题,我如何确保按钮在北方?因为他们现在居中