Как правильно выровнять компонент внутри SpringLayout?
Я пытаюсь создать макет с несколькими текстовыми элементами слева и кнопкой справа. У меня есть текстовые элементы точно так, как я хочу, но я не могу выровнять кнопку справа.
Я создаю кнопку следующим образом:
SpringLayout layout = new SpringLayout();
JPanel p2 = new JPanel(layout);
// set panel size very large so it fills its own parent
p2.setMaximumSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE));
p2.setBackground(new Color(0xffd0d0));
p2.setBorder(BorderFactory.createLineBorder(new Color(0)));
// Add some text items; omitted for clarity
...
// Add a button in the lower-right corner
JButton btn = new JButton(refreshAction);
p2.add(btn);
layout.putConstraint(SpringLayout.EAST, btn,
Spring.constant(0),
SpringLayout.EAST, p2);
layout.putConstraint(SpringLayout.SOUTH, btn,
Spring.constant(0),
SpringLayout.SOUTH, p2);
Я думал, что это выровняет восточный и южный края кнопки с восточным и южным краями контейнера, но этого не происходит. Похоже, что края кнопок выровнены с предпочтительным размером контейнера, а не с его фактическим размером.
Еще одна точка данных: когда я устанавливаю значения для меток, кнопка переходит вправо, выравнивая себя с концом только что добавленного текста. Очевидно, что предпочтительный размер контейнера увеличился, даже если фактический размер не изменился, и позиция кнопки изменилась в ответ на это.
2 ответа
Ну, нет ответа через два дня = найти другой путь. Я в итоге использовал GridBagLayout, что я должен был сделать в первую очередь. Я оставлю вопрос открытым на случай, если кто-нибудь ответит на него когда-нибудь.
Так что это очень старый вопрос, но у меня была похожая проблема с правильным выравниванием при использовании SpringLayout.
Для меня сработало выравнивание по левому краю и подбор компонентов так, чтобы они соответствовали правому краю вашей панели. (что может быть не лучшим решением)
Например, если у меня было четыре поля, я хотел выровнять:
| box1 | box2 |
| box3 | box4 |
box1 будет:
layout.putConstraint(SpringLayout.NORTH, box1, 2, SpringLayout.NORTH, buttonPanel);
layout.putConstraint(SpringLayout.WEST, box1, 2, SpringLayout.WEST, buttonPanel);
box2 будет:
layout.putConstraint(SpringLayout.NORTH, box2, 2, SpringLayout.NORTH, buttonPanel);
layout.putConstraint(SpringLayout.WEST, box1, 2, SpringLayout.EAST, box1);
box3 будет:
layout.putConstraint(SpringLayout.NORTH, box3, 2, SpringLayout.SOUTH, box1);
layout.putConstraint(SpringLayout.WEST, box3, 2, SpringLayout.WEST, buttonPanel);
box4 будет:
layout.putConstraint(SpringLayout.NORTH, box4, 2, SpringLayout.SOUTH, box2);
layout.putConstraint(SpringLayout.WEST, box1, 2, SpringLayout.EAST, box3);