Расположение 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;