Расположение Gridbag в Java

Я должен редактировать макет gridbag проблематично, и у меня странные результаты.
Ожидаемый результат:
| A | | Б |
| - | | C |
| D | | - |

Результаты:
| A | | Б |
| D | | C |

A и C имеют высоту 2 Это как работает gridbag? есть ли способ заставить его?

Моя программа имеет два столбца и n строк. Он поддерживает ширину 2, но вступает в силу только в первом столбце. Если во 2-м ряду действует так, как будто ширина равна 1.

gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(7, 7, 7, 7);
gbc.weightx = 0.5;
gbc.anchor = GridBagConstraints.NORTH;

компоненты добавляются пользователем, и пользователь определяет width а также height, gridxа также gridy значения определяются тем, какие другие компоненты добавляются и размещаются.

Скажем, макет gridbag отлично работает
* _ _
| | B |
| _ | C |
это просто не нравится, когда С имеет высоту 2

2 ответа

Теперь, когда вопрос прояснен:

protected static final Insets entryInsets = new Insets(0, 10, 4, 10);
protected static final Insets spaceInsets = new Insets(10, 10, 4, 10);

protected void createPartControl() {
    panel = new JPanel();
    panel.setLayout(new GridBagLayout());

    int gridy = 0;
    gridy = createTextFields(gridy);
}

protected int createTextFields(int gridy) {
    JLabel a = new JLabel("A");
    a.setHorizontalAlignment(SwingConstants.LEFT);
    addComponent(panel, a, 0, gridy, 1, 2, spaceInsets,
            GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL);

    JLabel b = new JLabel("B");
    b.setHorizontalAlignment(SwingConstants.LEFT);
    addComponent(panel, b, 1, gridy++, 1, 1, spaceInsets,
            GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL);

    JLabel c = new JLabel("C");
    c.setHorizontalAlignment(SwingConstants.LEFT);
    addComponent(panel, c, 1, gridy++, 1, 1, entryInsets,
            GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL);

    JLabel d = new JLabel("D");
    d.setHorizontalAlignment(SwingConstants.LEFT);
    addComponent(panel, d, 0, gridy++, 2, 1, entryInsets,
            GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL);

    return gridy;
}

protected void addComponent(Container container, Component component,
        int gridx, int gridy, int gridwidth, int gridheight, 
        Insets insets, int anchor, int fill) {
    GridBagConstraints gbc = new GridBagConstraints(gridx, gridy,
            gridwidth, gridheight, 1.0D, 1.0D, anchor, fill, insets, 0, 0);
    container.add(component, gbc);
}

Убедитесь, что вы устанавливаете GridbagConstraints.BOTH для тебя fill собственность GridbagConstraints объект, который вы используете. В противном случае вы не сможете разместить компоненты в нескольких строках.

GridbagConstraints c = new GridbagConstraints();
c.fill = GridbagConstraints.BOTH;
Другие вопросы по тегам