GridBagLayout-意外添加/更改了间距

时间:2019-02-04 07:47:33

标签: java swing awt layout-manager gridbaglayout

因此,添加面板时,面板之间的间距(包含JTextAreas)之间的间距发生了变化,请参阅picture。 :D

示例

第一次按下按钮addTextArea()时。图片中的状态1->状态2。问题是panel_buttons与新添加的WorkDescriptionJTextArea)距离不太近。并且当多次按下按钮时,它们之间的间距会改变。

按钮以前有很大的跳跃,但是带有; c.weighty = 0.1 - 0.3的跳跃较小。

// The panel is placed in the center of a JFrame (BorderLayout)
public CONSTRUCTOR {

    JPanel panel = new JPanel(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    // ...
    c.anchor = GridBagConstraints.NORTHWEST;
    c.gridx = 0;
    c.gridy = 0;
    c.weightx = 1;
    c.weighty = 1;
    c.gridwidth = 1;
    c.gridheight = 1;
    // this is how everything looks at (first pic) start.
    panel.add(panel_buttons, c);   // panel_buttons is at the right place
}

添加新的WorkDescription,即JTextArea的方法:

public void addTextArea() {

    WorkDescription wd = new WorkDescription(); //WorkDescription extends JPanel

    panel.remove(panel_buttons); 
    c.weighty = 0.25;       // I've messed around with the weighty alot.
                            // 0.2-0.25 makes the panel_buttons do the least amout of 'down-jump'
    panel.add(wd, c);

    if(c.gridy < 3 ) {
        c.gridy ++;
        c.weighty = 1;

        panel.add(panel_buttons, c);
    }
    panel.revalidate();
    panel.repaint();
}

1 个答案:

答案 0 :(得分:0)

我发现最好的解决方案

GridBagLayout切换到GridLayout

private JPanel panel_Center = new JPanel(new GridLayout(5,1)); 

然后,当然,删除所有GridBagConstraints

public void addTextArea() {

    WorkDescription wd = new WorkDescription();

    panel.remove(panel_buttons); 
    panel.add(wd);

    if(addedWorks < 4 ) {       

        addedWorks++;
        panel.add(panel_buttons);

    }

    panel.revalidate();
    panel.repaint();
}