GridBagLayout - непреднамеренно добавленный / и измененный интервал - PullRequest
0 голосов
/ 04 февраля 2019

Итак, у меня есть проблема с измененным интервалом между панелями (содержащим JTextAreas), когда я добавляю панели, смотрите рисунок .: D

image

Пример

При нажатии кнопки при первом вызове addTextArea().Состояние 1 -> состояние 2 на картинке.И проблема в том, что panel_buttons не так близки к недавно добавленному WorkDescription (JTextArea).И когда кнопка нажимается несколько раз, расстояние между ними изменяется.

Кнопки делали большой скачок раньше, но с;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 голосов
/ 05 февраля 2019

Лучшее решение , которое я нашел, было,

Переключиться с 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();
}
...