#java #swing #user-interface
#java #swing #пользовательский интерфейс
Вопрос:
В моем приложении Java Swing у меня есть два компонента. С левой стороны находится навигация (JList), а с правой стороны — JTable. Я хотел бы оставить возможность увеличивать размер окна, не увеличивая размер обоих компонентов.
Пропорция 50/50 сохраняется на протяжении всего процесса изменения размера. Я использую GridLayout. Является ли это поведение укорененным в LayoutManager или это свойство, которое должно быть установлено?
Ответ №1:
GridbagLayout
позволит вам достичь этого. Однако рассматривали ли вы также возможность использования JSplitPane
, где в левой части находится панель навигации, а в правой — таблица? Вы могли бы настроить это так, чтобы все дополнительное пространство выделялось с правой стороны, вызвав setResizeWeight(0.0)
. Однако вы по-прежнему сохраняете гибкость, позволяя пользователю вручную изменять размер области навигации, если требуется. У вас также есть возможность полностью скрыть панель навигации, вызвав setOneTouchExpandable(true)
разделенную панель.
Ответ №2:
Из того, что я знаю, менеджер GridLayout изменяет размер всех ячеек до одинакового размера. Зная это, вы можете использовать это в любом случае, просто добавьте компонент, который вы хотите оставить неизменным, на панель, а затем добавьте эту панель в ячейку вместо этого.
Или используйте другой менеджер компоновки, мой любимый — TableLayout, где вы можете указать, какие столбцы / строки должны заполнять пустое пространство, в то время как остальные останутся в их предпочтительном размере.
Удачи, Боро
Ответ №3:
Предложение: Не используйте GridLayout. Вместо этого используйте другие макеты, такие как Borderlayout или GridBagLayout, или комбинацию макетов. Например, если вы использовали BorderLayout , вы могли бы использовать только BorderLayout JTable.Расположите JList по ЦЕНТРУ в одной из других позиций. Или, если вы используете GridBagLayout, то, правильно установив значения GridBagConstraint weightx и weighty, а также значения заполнения (только вы знаете, что вам нужно в данный момент), вы сможете выборочно увеличивать компоненты, добавляемые в контейнер.