Как правильно выровнять компонент внутри 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);
Другие вопросы по тегам