2012-04-02 2 views
3

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

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

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

+0

java swing, я использовал, чтобы получить кошмары, когда использовал эту вещь. [Вздрагивает ...] o_O – ApprenticeHacker

+0

Ну, я почти сделал так, что найти другие варианты на самом деле не очень хорошая идея ^^ – Giannis

+0

+1 для вашего определения и осуждения. По-моему, что-то, что можно использовать с java-качелями и оживлением, чтобы рассказать историю, заслуживает благородной премии. – ApprenticeHacker

ответ

2

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

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

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

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

+0

Пробовал. Точно такое же поведение. – Giannis

+0

Может быть проблема с JScrollPane? Хотя textArea/textPane не может работать без JScrollPane .. – Giannis

+0

Одна пустая панель как-то вызывала проблему. Хотя макеты также могут помочь. Благодаря ! – Giannis

0

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

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

+0

У меня все получилось. Проблема заключалась в том, что JPanel, который я пытался изменить, был в другом JPanel. Как только внешняя панель была удалена, она сработала. Хотя я проведу тестирование с помощью GridBagLayout, чтобы узнать это. Приветствия. – Giannis

0

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

jTextPane.setMinimumSize(new Dimension(50, 50)); 

 Смежные вопросы

  • Нет связанных вопросов^_^