Макет сетки в java

Мне приходится редактировать макет сетки, и я получаю странные результаты.
ожидается:
| А | | B |
| - | | C |
| D | | - |

Результаты:
| А | | B |
| D | | C |

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

В моей программе два столбца и 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 определяются тем, какие другие компоненты добавляются и размещаются.

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


person Phox    schedule 20.09.2012    source источник
comment
Вам следует опубликовать код, чтобы мы видели, что вы пытаетесь сделать.   -  person SJuan76    schedule 20.09.2012
comment
Хм. позвольте мне посмотреть, смогу ли я очистить метод, чтобы он был немного более общим. а пока позвольте мне попытаться объяснить это несколько: (высота и ширина представляют ограничения сетки) У меня есть несколько таблиц, созданных пользователем с высотой 1-10 и шириной 1-2   -  person Phox    schedule 20.09.2012
comment
Вы можете показать несколько снимков экрана и код? Вопрос как есть слишком абстрактный.   -  person Gilberto Torrezan    schedule 20.09.2012
comment
Разместите GridbagConstraints для компонентов.   -  person basiljames    schedule 20.09.2012
comment
разместил ограничения сетки в вопросе   -  person Phox    schedule 20.09.2012


Ответы (2)


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

GridbagConstraints c = new GridbagConstraints();
c.fill = GridbagConstraints.BOTH;
person Dan D.    schedule 20.09.2012
comment
извините, я не понял в моем примере A и C - это компоненты с высотой 2 - person Phox; 20.09.2012

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

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);
}
person Gilbert Le Blanc    schedule 20.09.2012