Изменение размера только одной части компонентов Java Swing

#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, а также значения заполнения (только вы знаете, что вам нужно в данный момент), вы сможете выборочно увеличивать компоненты, добавляемые в контейнер.