Spec-Zone .ru
спецификации, руководства, описания, API
|
A JSplitPane
дисплеи два компонента, или рядом или один сверху другого. Перетаскивая делитель, который появляется между компонентами, пользователь может определить, сколько из общей площади разделенной области идет в каждый компонент. Можно разделить экранное пространство среди трех или больше компонентов, вставляя разделенные области разделенных областей, как описано в Разделенных областях Вложения.
Если Вы хотите создать разделенную область с произвольным числом компонентов, следует проверить статью
Вместо того, чтобы добавить компоненты интереса непосредственно для разделенной области, Вы часто помещаете каждый компонент в область прокрутки. Вы тогда помещаете области прокрутки в разделенную область. Это позволяет пользователю просматривать любую часть компонента интереса, не требуя, чтобы компонент, чтобы привести много в рабочее состояние экрана расположил с интервалами или адаптировался к отображению в переменном количестве экранного пространства.
Вот изображение приложения, которое использует разделенную область, чтобы вывести на экран список и изображение рядом:
Ниже код от SplitPaneDemo
это создает и устанавливает разделенную область.
//Create a split pane with the two scroll panes in it. splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, listScrollPane, pictureScrollPane); splitPane.setOneTouchExpandable(true); splitPane.setDividerLocation(150); //Provide minimum sizes for the two components in the split pane Dimension minimumSize = new Dimension(100, 50); listScrollPane.setMinimumSize(minimumSize); pictureScrollPane.setMinimumSize(minimumSize);
Конструктор, используемый этим примером, берет три параметра. Первое указывает на направление разделения. Другими параметрами являются эти два компонента, чтобы вставить разделенную область. Обратитесь к Установке Компонентов в Разделенной области для информации о JSplitPane
методы, которые устанавливают компоненты динамически.
Разделенная область в этом примере разделяется горизонтально — эти два компонента появляются рядом — как определено JSplitPane.HORIZONTAL_SPLIT
параметр конструктору. Разделенная область предоставляет одну другую возможность, определенную с JSplitPane.VERTICAL_SPLIT
, это помещает один компонент выше другого. Можно изменить направление разделения после того, как разделенная область была создана с setOrientation
метод.
Две маленьких стрелки появляются наверху делителя в разделенной области примера. Эти стрелки, которым позволяют пользователь выйти из строя (и затем развернуть) любой из компонентов одним щелчком. Текущий стиль определяет, появляются ли эти средства управления по умолчанию. В стили Java они выключаются по умолчанию. (Отметьте, что не весь взгляд и чувства поддерживают это.) Пример, превращенный их при использовании setOneTouchExpandable
метод.
Диапазон делителя разделенной области определяется частично минимальными размерами компонентов в пределах разделенной области. См. Расположение Делителя и Ограничение его Диапазона для деталей.
Остальная часть этого раздела затрагивает эти темы:
Программа может установить два компонента разделенной области динамически с этими четырьмя методами:
setLeftComponent
setRightComponent
setTopComponent
setBottomComponent
Можно использовать любой из этих методов в любое время независимо от текущего направления разделения разделенной области. Звонки setLeftComponent
и setTopComponent
эквивалентны и устанавливает указанный компонент в главной или левой позиции, в зависимости от текущей ориентации разделения разделенной области. Точно так же звонки setRightComponent
и setBottomComponent
эквивалентны. Эта замена методов любой компонент уже находится в той позиции с новой.
Как другие контейнеры, JSplitPane
поддерживает add
метод. Разделенная область помещает первый компонент, добавленный в покинутых или ключевую позицию. Опасность использовать add
это, Вы можете inadvertantly вызывать это слишком много раз, когда менеджер по расположению разделенной области выдаст довольно тайно выглядящее исключение. Если Вы используете add
метод и разделенная область уже заполняются, Вы сначала должны удалить существующие компоненты с remove
.
Если Вы поместите только один компонент в разделенную область, то делитель застрянет в правой стороне или нижней части разделенной области, в зависимости от ее направления разделения.
Чтобы заставить Вашу разделенную область работать хорошо, Вы часто должны устанавливать минимальные размеры компонентов в разделенной области, так же как привилегированный размер или разделенной области или ее содержавших компонентов. Выбор, какие размеры следует установить, является искусством, которое требует понимания, как определяются привилегированный размер разделенной области и расположение делителя. Прежде, чем мы войдем в детали, давайте бросим другой взгляд на SplitPaneDemo. Или, если Вы спешите, можно пропустить к списку правил.
pack
метод, разделенная область в ее привилегированном размере, который SplitPaneDemo, оказывается, устанавливает явно. Делитель автоматически помещается так, чтобы левый компонент был в его привилегированном width, и все остающееся пространство идет в правильный компонент.Теперь, когда Вы видели поведение значения по умолчанию разделенных областей, мы можем сказать Вам, что происходит негласно и как можно влиять на него. В этом обсуждении, когда мы обращаемся к привилегированному или минимальному размеру компонента, мы часто имеем в виду привилегированный или минимальный width компонента, если разделенная область является горизонталью, или ее привилегированным или минимальным height, если разделенная область является вертикалью.
По умолчанию привилегированный размер разделенной области и расположение делителя инициализируются так, чтобы эти два компонента в разделенной области были в их привилегированных размерах. Если разделенная область не выводится на экран в этом привилегированном размере, и программа не установила расположение делителя явно, то начальная позиция делителя (и таким образом размеры этих двух компонентов) зависит от свойства разделенной области, названного изменять размеры весом. Если разделенная область первоначально в ее привилегированном размере или больше, то содержавшие компоненты начинаются в их привилегированных размерах, прежде, чем корректироваться для изменять размеры веса. Если разделенная область является первоначально слишком маленькой, чтобы вывести на экран оба компонента в их привилегированных размерах, то они начинают в их минимальных размерах, прежде, чем корректироваться для изменять размеры веса.
Разделенная область изменяет размеры веса, имеет значение между 0.0 и 1.0 и определяет, как пространство распределяется между двумя содержавшими компонентами, когда размер разделенной области устанавливается — или программно или пользователем, изменяющим размеры разделенной области (увеличение ее содержания окна, например). Изменять размеры вес разделенной области 0.0 по умолчанию, указывая, что покинутые или размер главного компонента фиксируются, и компонент права или нижней части корректирует свой размер, чтобы соответствовать остающемуся пространству. Установка изменять размеры вес к 0.5 разделениям любое дополнительное или недостающее пространство равномерно между этими двумя компонентами. Установка изменять размеры вес к 1.0 делает право или нижний компонентный размер, остается фиксированной. Изменять размеры вес не имеет никакого эффекта, однако, когда пользователь перетаскивает делитель.
Пользователь может перетащить делитель к любой позиции, пока никакой содержавший компонент не понижается свой минимальный размер. Если у делителя есть кнопки с одним касанием, пользователь может использовать их, чтобы заставить делитель переместить полностью в одну сторону или другой — независимо от того, каковы минимальные размеры компонентов.
Теперь, когда Вы знаете факторы, которые влияют на размер разделенной области и расположение делителя, вот немного правил для того, чтобы заставить их работать хорошо:
setMinimumSize
на этом или переопределяя getMinimumSize
метод. Например, если Вы хотите, чтобы пользователь был в состоянии перетащить делитель полностью обеим сторонам: Dimension minimumSize = new Dimension(0, 0); leftComponent.setMinimumSize(minimumSize); rightComponent.setMinimumSize(minimumSize);
Это должно обычно происходить, если разделенной области дают ее привилегированный размер, который зависит от менеджера по расположению, содержащего разделенную область. Другая опция должна явно установить привилегированный размер на разделенной области, которая больше чем размер содержавших компонентов.
setResizeWeight
: splitPane.setResizeWeight(1.0);
splitPane.setResizeWeight(0.5);
setPreferredSize
метод на области прокрутки, вызовите соответствующий метод на компонент в области прокрутки (такой как setVisibleRowCount
метод для JList
или JTree
).setDividerLocation
метод. Например, чтобы сделать левый компонент 150 широкими пикселями: splitPane.setDividerLocation(150 + splitPane.getInsets().left);
Сделать правильный компонент 150 пикселями широкий:
splitPane.setDividerLocation(splitPane.getSize().width - splitPane.getInsets().right - splitPane.getDividerSize() - 150);
splitPane.setDividerLocation(0.25);
Отметьте, что это реализуется с точки зрения текущего размера и поэтому действительно ony полезно, если разделенная область видима.
Чтобы разметить разделенную область, как будто это только подходило, вероятно повторно располагая делитель в процессе, вызывают resetToPreferredSizes()
на разделенной области.
revalidate
впоследствии — недостаточно, чтобы заставить разделенную область размечать себя снова. Следует вызвать resetToPreferredSizes
также. Следующий снимок показывает пример под названием SplitPaneDividerDemo, который демонстрирует компонентные размеры разделенной области и размещение делителя.
Как SplitPaneDemo, SplitPaneDividerDemo обладает горизонтальной разделенной областью с кнопками с одним касанием. У SplitPaneDividerDemo есть следующие дополнительные функции:
resetToPreferredSizes
на разделенной области.JComponent
подкласс вызывают SizeDisplayer
. A SizeDisplayer
выводит на экран дополнительный текст на фоне увядшего (и также дополнительный) изображение. Что еще более важно у этого есть прямоугольники, которые показывают его привилегированные и минимальные размеры.SizeDisplayer
s, чтобы иметь равные привилегированные размеры (из-за одинаково больших изображений они показывают), но неравные минимальные размеры.pack
метод, разделенная область в ее привилегированном размере, который по умолчанию является только достаточно большим для SizeDisplayer
s, чтобы быть в их привилегированных размерах. Привилегированный размер каждого SizeDisplayer
обозначается красным прямоугольником. Делитель автоматически помещается так, чтобы оба компонента были в их привилегированных ширинах.SizeDisplayers
это содержит. Минимальный размер каждого SizeDisplayer
обозначается ярким синим прямоугольником.SizeDisplayer
s выводятся на экран в различных размерах, даже при том, что, когда приложение подходило, у них были равные размеры. Причина состоит в том, что, хотя их привилегированные размеры равны, их минимальные размеры не. Поскольку разделенная область не может вывести на экран их в их привилегированных размерах или больше, она кладет их использование их минимальных размеров. Оставшееся пространство делится одинаково между компонентами, так как разделенная область изменяет размеры веса, 0.5.SizeDisplayer
s, чтобы быть показанными в их привилегированных размерах, и затем щелкают по Кнопке сброса.Вот код, который создает GUI для SplitPaneDividerDemo:
public class SplitPaneDividerDemo extends JPanel ... { private JSplitPane splitPane; public SplitPaneDividerDemo() { super(new BorderLayout()); Font font = new Font("Serif", Font.ITALIC, 24); ImageIcon icon = createImageIcon("images/Cat.gif"); SizeDisplayer sd1 = new SizeDisplayer("left", icon); sd1.setMinimumSize(new Dimension(30,30)); sd1.setFont(font); icon = createImageIcon("images/Dog.gif"); SizeDisplayer sd2 = new SizeDisplayer("right", icon); sd2.setMinimumSize(new Dimension(60,60)); sd2.setFont(font); splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sd1, sd2); splitPane.setResizeWeight(0.5); splitPane.setOneTouchExpandable(true); splitPane.setContinuousLayout(true); add(splitPane, BorderLayout.CENTER); add(createControlPanel(), BorderLayout.PAGE_END); } ... }
Код справедливо сам объяснительный, кроме, возможно, для звонка setContinuousLayout
. Установка continuousLayout свойства к истине заставляет содержание разделенной области быть нарисованным непрерывно, в то время как пользователь перемещает делитель. Непрерывное расположение не включено, по умолчанию, потому что оно может оказать отрицательное влияние производительности. Однако, имеет смысл использовать это в этом демонстрационном примере, когда наличие компонентов разделенной области, настолько актуальных насколько возможно, может улучшить пользовательский опыт.
Вот изображение программы, которая достигает разделения с тремя путями вложением одна разделенная область в другом:
Если главная часть разделенной области выглядит знакомой Вам, это - потому что программа помещает разделенную область, создаваемую SplitPaneDemo
во второй разделенной области. Простое JLabel
другой компонент во второй разделенной области. Это не наиболее практическое применение вложенной разделенной области, но оно понимает через.
Вот интересная часть кода, в котором можно найти SplitPaneDemo2.java
:
//Create an instance of SplitPaneDemo SplitPaneDemo splitPaneDemo = new SplitPaneDemo(); JSplitPane top = splitPaneDemo.getSplitPane(); ... //Create a regular old label label = new JLabel("Click on an image name in the list.", JLabel.CENTER); //Create a split pane and put "top" (a split pane) //and JLabel instance in it. JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, top, label);
Обратитесь к Решению Общих Компонентных проблем для информации о решении проблемы границы, которая может появиться когда разделенные области вложения.
Следующие таблицы приводят обычно используемый JSplitPane
конструкторы и методы. Другие методы Вы, наиболее вероятно, вызовете на a JSplitPane
объект - те такой как setPreferredSize
то, что его суперклассы обеспечивают. См. API JComponent для таблиц обычно используемых наследованных методов.
API для того, чтобы использовать списки попадает в эти категории:
Метод или Конструктор | Цель |
---|---|
JSplitPane () |
Создайте разделенную область. Когда существующий, int параметр указывает на ориентацию разделенной области, также HORIZONTAL_SPLIT (значение по умолчанию) или VERTICAL_SPLIT . boolean параметр, когда существующий, устанавливает, перекрашивают ли компоненты непрерывно, поскольку пользователь перетаскивает разделенную область. Если оставлено неуказанный, эта опция (названный непрерывным расположением) выключается. Component набор параметров левая и правая начальная буква, или вершина и нижние компоненты, соответственно. |
|
Набор или получает ориентацию разделенной области. Используйте также HORIZONTAL_SPLIT или VERTICAL_SPLIT определенный в JSplitPane . Если оставлено неуказанный, разделенная область будет горизонтально разделена. |
|
Набор или получает размер делителя в пикселях. |
|
Набор или добирается, являются ли компоненты разделенной области непрерывно layed и нарисованный, в то время как пользователь перетаскивает делитель. По умолчанию непрерывное расположение выключается. |
|
Набор или добирается, выводит ли разделенная область на экран управление на делителе, чтобы расшириться/выйти из строя делитель. Значение по умолчанию зависит от стили. В стили Java это прочь по умолчанию. |
Метод | Цель |
---|---|
|
Набор или получает обозначенный компонент. Каждый метод работает независимо от ориентации разделенной области. Вершина и оставленный эквивалентна, и нижняя часть и право эквивалентны. |
|
Удалите обозначенный компонент (ы) из разделенной области. |
|
Добавьте компонент к разделенной области. Можно добавить только два компонента к разделенной области. Первый добавленный компонент является главным/левым компонентом. Второй добавленный компонент является компонентом нижней части/права. Любая попытка добавить больше компонентов приводит к исключению. |
Метод | Цель |
---|---|
|
Набор или получает текущее расположение делителя. Устанавливая расположение делителя, можно определить новое расположение как процент (double ) или пиксельное расположение (int ). |
|
Переместите делитель так, что, оба компонента в их привилегированных размерах. Это - то, как разделенная область делит себя при запуске, если не определено иначе. |
|
Набор или получает предыдущую позицию делителя. |
|
Получите минимальные и максимальные расположения для делителя. Они устанавливаются неявно, устанавливая минимальные размеры двух компонентов разделенной области. |
|
Набор или получает изменять размеры вес для разделенной области, значения между 0.0 (значение по умолчанию) и 1.0. См. Расположение Делителя и Ограничение Его Диапазона для объяснения и примеров использования изменять размеры веса. |
Эта таблица показывает некоторые примеры то использование JSplitPane
и где те примеры описываются.
Пример | Где Описано | Примечания |
---|---|---|
SplitPaneDemo |
Эта страница и Как Использовать Списки | Показывает разделенную область с горизонтальным разделением. |
SplitPaneDividerDemo |
Эта страница | Демонстрирует, как компонентная информация о размере и изменяет размеры веса, используются, чтобы расположить делитель. |
SplitPaneDemo2 |
Эта страница | Помещает разделенную область в пределах разделенной области, чтобы создать разделение с тремя путями. |
TreeDemo |
Как Использовать Деревья | Использует разделенную область с вертикальным разделением, чтобы разделить дерево (в области прокрутки) от области редактора (в области прокрутки). Не использует расширяемую функцию с одним касанием. |
TextComponentDemo |
Текстовые Компонентные Функции | Использует разделенную область с вертикальным разделением, чтобы разделить текстовую область и текстовую область, обоих в областях прокрутки. |
TextSamplerDemo |
Текстовые Компонентные Функции | Использует разделенную область с вертикальным разделением, и измените размеры веса 0.5, чтобы разделить текстовую область и область редактора, обоих в областях прокрутки. Разделенная область находится в правильной половине контейнера, у которого есть справедливо сложное расположение. Менеджеры по расположению такой как GridLayout и BorderLayout используются, наряду с разделенной областью изменяют размеры веса, чтобы гарантировать, что компоненты в областях прокрутки совместно используют все дополнительное пространство. |
ListSelectionDemo |
|
Использует разделенную область с вертикальным разделением, чтобы разделить верхнюю область, содержа список и таблицу (оба в областях прокрутки), от более низкой области, которая содержит поле комбинированного списка выше области прокрутки. Более низкая область использует расположение границы, чтобы сохранить поле комбинированного списка маленьким и область прокрутки жадный для пространства. |