2015-07-23 6 views
1

У меня есть JPanel, который использует горизонтальную компоновку Box и содержит JLabel, что я хотел бы, чтобы в том же положении, как и другие компоненты в JPanel являются setVisible(false). В настоящее время JLabel перемещается влево, так как другие компоненты становятся невидимыми.Сохраняя компонент в фиксированном положении в BoxLayout

Что может быть самым простым способом?

EDIT: Фото добавлено

Так это то, что JPanel выглядеть со всех компонентами видимых

enter image description here

Когда я поставил три JTextFields о праве на невидимый, JLabel набора к тексту X перемещается влево примерно так:

enter image description here

Но я хотел бы, чтобы остаться там, где это было так:

enter image description here

EDIT2: Я на самом деле с помощью Free Design Netbeans GUI редактора для этого конкретного JLabel. Прошу прощения за ошибку. Недавно я использовал много BoxLayouts, и я смутился!

+0

Пожалуйста, приложите, пожалуйста, приблизительный эскиз ожидаемого вида, который действительно поможет нам предоставить подлинный ответ :-) –

+1

Да, это хорошая идея. Я редактировал сообщение. – mmgro27

+0

Непонятно, что компоненты GUI появляются и исчезают. Было бы лучше включить и отключить JTextFields. –

ответ

4

В настоящее время JLabel перемещается влево, так как другие компоненты становятся невидимыми.

Да, менеджеры макетов предназначены только для работы с видимыми компонентами. Я не уверен, что какой-либо из менеджеров компоновки по умолчанию будет работать, но я бы посмотрел на использование GridBagLayout, так как этот макет основан на структуре сетки, так что пока у вас есть компоненты в этой сетке в другой строке, ярлык не должен сдвиг.

В противном случае вы можете вывести «другие компоненты» на панели с помощью CardLayout. Затем вместо того, чтобы сделать компоненты невидимыми, вы меняете панель пустой панелью.

Для получения дополнительной информации и рабочих примеров ознакомьтесь с разделом из учебника Swing по телефону How to Use CardLayout.

Edit:

Основываясь на вашей картине самое простое решение заключается в использовании «клей»:

panel.add(Box.createHorizontalGlue); 
panel.add(xLabel); 

Теперь метка всегда будет отображаться в правой части панели. Прочтите учебник по How to Use BoxLayout для получения дополнительной информации о «клеи».

+0

См. Мой Edit2. Я очень сожалею о том, что эта смесь. Теперь может быть труднее ответить на мой вопрос, я понял, что использую бесплатный дизайн. Я могу только начать с BoxLayout. – mmgro27

+0

@notnek, это не меняет мой ответ. Да, вы должны использовать BoxLayout или другие менеджеры макетов. «Клей» по-прежнему остается решением для BoxLayout. – camickr