Лучшая стратегия размещения, если удаление / добавление компонентов в Java Swing UI? - PullRequest
2 голосов
/ 12 октября 2010

У меня динамический пользовательский интерфейс java Swing form, размер которого нужно изменить при нажатии кнопки переключения. Компоненты внутри панели формы должны быть удалены или добавлены, а высота соответственно уменьшена / увеличена.

Cardlayout позволяет мне переключаться между двумя панелями с разными компонентами, но высота привязана к самой высокой карте. Мне нужно динамически удалять компоненты качелей и уменьшать высоту внутренних панелей, а также всей главной панели.

Использование Grouplayout с setHonorsVisibility (true) также не работает, если не будет заново создана вся иерархия макета. Нет способа избавиться от промежутков между скрытыми компонентами.

BoxLayout может работать, но с контейнером box будет сложно расположить элементы формы для правильного выравнивания. Так что я не пробовал.

Я бы хотел работать с Netbeans GUI Builder, если это возможно, но по умолчанию GroupLayout не работает для меня. Так что, глядя на другие шаблоны проектирования / стратегии, чтобы решить эту проблему.

Я бы не хотел вручную устанавливать предпочтительные размеры на вложенных панелях.

Как люди справляются с переупаковкой интерфейса после удаления компонентов?

Ответы [ 2 ]

2 голосов
/ 12 октября 2010

Вам, вероятно, придётся пойти с многоцелевой атакой, как вы уже выложили.

1) раскладка карт для замены - помогает держать не связанные вещи отдельно

2) какой бы макет вам не нужен для каждой карты.

Первоначально я сделал лот вложенных панелей BorderLayout, а затем перешел к GridBagLayout почти для всего.В то время как сложный в изучении, он самый гибкий.Это, вероятно, не очень дружелюбно по отношению к guibuilder'у.

В худшем случае, вы можете написать свой собственный макет ... но это сложно с большим количеством ошибок ...

С обменом / видимостью выможет потребовать кучу валидации / аннулирования / перерисовки или принудительных вызовов doLayout.

1 голос
/ 12 октября 2010

То, как я делал это в прошлом, - это использование GrdBagLayout. Это позволяет вам указать, где объекты будут жить, будут ли они заполняться или нет в своей ячейке, и устанавливает минимальный размер ячейки, чтобы компоненты могли хорошо играть друг с другом. Следуйте за этим с помощью frame.pack (), и у вас появятся диалоговые окна автоматического изменения размера. Обратите внимание, что вы должны установить размеры (iirc, он минимальный и не предпочтительный, хотя я могу ошибаться) вместе с ограничениями мешка сетки (вес, ячейка, с какой частью ячейки он связан и т. Д.). *

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...