Использование JSplitPane с JTextArea - PullRequest
3 голосов
/ 02 апреля 2012

В моем приложении я получил кадр, содержащий JSplitPane.JSplitPane установлен для разделения по горизонтали.С левой стороны есть панель, содержащая некоторые компоненты, которые не имеют значения.Справа я получил JPanel (BoxLayout), содержащий подкласс JTextArea внутри JScrollPane, JTextPane внутри JScrollPane и JButton.

Моя проблема в том, как заставить компоненты (в основном справа) изменить размер, основываясь на взаимодействии с JSplitPane.Поэтому, когда JSplitPane перетаскивается влево, мои JTextArea и JTextPane становятся шире.

Я пробовал разные настройки, также устанавливал предпочитаемый размер и максимальный размер, но, похоже, ничего из этого не работает.Компоненты остаются в своем предпочтительном размере.Если я пытаюсь сделать их меньше, scrollPane работает (и это нормально), но когда я пытаюсь их увеличить, они остаются в предпочтительном размере.

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

Скорее всего, ваша проблема связана с BoxLayout, используемым на правой панели. Копировать-вставить из класса javadoc:

BoxLayout пытается расположить компоненты по их предпочтительной ширине (для горизонтального расположения) или высоте (для вертикального расположения). Для горизонтальной компоновки, если не все компоненты имеют одинаковую высоту, BoxLayout пытается сделать все компоненты такими же высокими, как самый высокий компонент. Если это невозможно для конкретного компонента, то BoxLayout выравнивает этот компонент по вертикали в соответствии с Y-выравниванием компонента. По умолчанию компонент имеет Y-выравнивание 0,5, что означает, что вертикальный центр компонента должен иметь ту же координату Y, что и вертикальные центры других компонентов с 0,5 Y-выравниванием.

Аналогично, для вертикальной компоновки BoxLayout пытается сделать все компоненты в столбце такими же широкими, как и самый широкий компонент. Если это не удается, он выравнивает их по горизонтали в соответствии с их X-выравниванием. Для макета PAGE_AXIS горизонтальное выравнивание выполняется на основе переднего края компонента. Другими словами, значение выравнивания X, равное 0,0, означает левый край компонента, если для компонента ComponentOrientation контейнера слева направо, и это означает правый край компонента, в противном случае

Используйте другой макет, который масштабирует внутренние компоненты. Например, CENTER область BorderLayout имеет такое поведение.

0 голосов
/ 01 февраля 2015

Для меня просто установка минимального размера, отличного от 0, в JTextArea решает проблему невозможности изменить размер JSplitPane при использовании JTextArea с BoxLayout.

jTextPane.setMinimumSize(new Dimension(50, 50));
0 голосов
/ 02 апреля 2012

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

Если вы не хотите изучать все нюансы GridBagLayout или MiGLayoutвы можете установить плагин WindowBuilder для Eclipse и использовать мастер Swing Designer в WindowBuilder и редактор WYSIWYG для настройки макетов.

...