Пакет javafx.scene.control
Контролы пользовательского интерфейса JavaFX (UI-контролы или просто Контролы) являются специализированными узлами в дереве сцены JavaFX, специально предназначенными для повторного использования во многих контекстах приложений. Они разработаны с возможностью высокой визуальной настройки разработчиками и дизайнерами. Они спроектированы для эффективной работы с системами компоновки. Примеры известных контролов включают Button, Label, ListView и TextField.
Поскольку Контролы являются Nodes в дереве сцены, они могут свободно комбинироваться с Groups, Images, Media, Text и basic geometric shapes. Хотя создание новых UI-контролов не является тривиальной задачей, их использование и стилизация очень просты, особенно для разработчиков, знакомых с веб-технологиями.
В остальной части этого документа будет описана базовая архитектура библиотеки UI-контролов JavaFX, как стилизовать существующие контролы, создавать пользовательские скины и использовать контролы для построения более сложных пользовательских интерфейсов.
Архитектура
Контролы следуют классической модели MVC. Control является "моделью". Она содержит как состояние, так и функции для его изменения. Сам класс Control не знает, как он отображается или как происходит пользовательское взаимодействие. Эти задачи делегируются Skin ("представление"), которое может внутренне разделить функциональность представления и контроллера на отдельные классы, хотя в настоящее время нет публичного API для "контроллера" аспекта.
Все Контролы наследуются от класса Control, который, в свою очередь, является Parent узлом и является Node. Каждый Control имеет ссылку на единственный Skin, который является реализацией представления для Control. Control делегирует Skin ответственность за вычисление минимальных, максимальных и предпочтительных размеров Control, смещения базовой линии и проверки попадания в область (содержания и пересечения). Также Skin, или делегат Skin, отвечает за реализацию и реакцию на все соответствующие события клавиш, которые происходят на Control, когда он имеет фокус.
Контрол
Control наследуется от Parent, и, следовательно, не является листом. С точки зрения разработчика или дизайнера Control можно рассматривать как лист в многих случаях. Например, разработчик или дизайнер может рассматривать кнопку как прямоугольник или другой простой лист.
Поскольку Control может быть изменён в размере, Control будет автоматически изменён на предпочтительный размер на каждом такте дерева сцены. Установка ширины и высоты Control не влияет на его предпочтительный размер. При использовании в контейнере компоновки ограничения компоновки, наложенные на Control (или указанные вручную на Control), определят, как он будет позиционироваться и масштабироваться.
Skin Control может быть изменён в любое время. Это пометит Control как нуждающийся в перерасчёте, поскольку изменение Skin, вероятно, изменило предпочтительный размер Control. Если Skin не указан во время создания Control, то будет предоставлен стандартный skin на основе CSS для всех встроенных Controls.
Каждый Control может иметь необязательный подсказку. Подсказка — это Control, который отображает информацию (обычно текстовую) о контроле пользователю, когда курсор мыши находится над Control в течение некоторого времени. Его можно стилизовать из CSS так же, как и другие Control.
focusTraversable в Control переопределяется, чтобы по умолчанию быть true, в то время как в Node по умолчанию false. Контролы, которые по умолчанию не должны быть фокусируемыми (например, Label), переопределяют это значение на false.
Функции getMinWidth, getMinHeight, getPrefWidth, getPrefHeight, getMaxWidth и getMaxHeight делегируются непосредственно Skin. Метод baselineOffset делегируется узлу Skin. Не рекомендуется, чтобы подклассы изменяли эти делегирования.
Стилизация Контролов
Существует два способа настройки внешнего вида Control. Самый сложный, но гибкий подход — создание нового Skin для Control, который точно реализует желаемый визуальный вид Control. Подробнее см. документацию по Skin.
Самый простой и вместе с тем мощный способ стилизации встроенных Controls — использование CSS. Обратите внимание, что в этом выпуске данное описание CSS относится только к стандартным Skin, предоставляемым для встроенных Controls. В последующих версиях это будет доступно для любых пользовательских сторонних Controls, которые захотят воспользоваться этими возможностями CSS.
Каждый из стандартных Skin для встроенных Controls состоит из нескольких независимых стилизуемых областей или регионов. Это похоже на HTML-страницу, которая состоит из <div> и стилизуется из CSS. Каждый отдельный регион может быть нарисован с фоном, границами, изображениями, отступами, отступами и так далее. Поддержка JavaFX CSS включает возможность иметь несколько фонов и границ, а также выводить цвета. Эти возможности делают очень лёгким изменение внешнего вида Controls в JavaFX с помощью CSS.
Цвета, используемые для рисования стандартных Skins встроенных Controls, все выводятся из базового цвета, цвета акцента и цвета фона. Просто изменив базовый цвет Control, вы можете изменить производные градиенты и создать кнопки или другие Controls, которые визуально соответствуют стандартным Skin, но визуально выделяются.
Как и все другие узлы в дереве сцены, Controls могут быть стилизованы с помощью внешнего стилизованного файла или путём прямого указания стиля на Control. Хотя для примеров проще выразить и понять с помощью прямого указания стиля на узел, рекомендуется использовать внешний стилизованный файл и использовать либо styleClass, либо id Control, как вы бы использовали "class" или id HTML-элемента с HTML CSS.
Каждый UI-контрол указывает styleClass, который может быть использован для стилизации контролов из внешнего стилизованного файла. Например, кнопка имеет CSS-стиль class "button". Имена CSS-стилей class разделены дефисами и написаны строчными буквами, в отличие от верблюжьего регистра, в противном случае они идентичны. Например, Button — "button", RadioButton — "radio-button", Tooltip — "tooltip" и так далее.
Документация по классу каждого Control определяет стандартные Skin-области, которые можно стилизовать. Для получения дополнительной информации о возможностях CSS, предоставляемых JavaFX, см. Руководство по CSS.
| Класс | Описание |
|---|---|
| Accordion | Аккордеон — это группа TitlePanes. |
| Alert | Класс Alert наследуется от класса Dialog и предоставляет поддержку ряда предопределённых типов диалоговых окон, которые можно легко отобразить пользователю для запроса ответа. |
| Alert.AlertType | Перечисление, содержащее доступные предопределённые типы сообщений, которые может использовать класс Alert для предварительной заполнения различных свойств. |
| Button | Простая кнопка. |
| ButtonBar | ButtonBar по сути является HBox с дополнительной функциональностью для размещения кнопок в соответствии с операционной системой. |
| ButtonBar.ButtonData | Перечисление всех доступных анотаций данных кнопок. |
| ButtonBase | Базовый класс для кнопочных элементов пользовательского интерфейса, включая гиперссылки, кнопки, переключатели, флажки и радиокнопки. |
| ButtonType | Класс ButtonType используется как часть API JavaFX Dialog (точнее, API DialogPane) для указания кнопок, которые должны быть показаны пользователю в диалоговых окнах. |
| Cell<T> | |
| CheckBox | Элемент управления с выбором в трёх состояниях, обычно оформленный как поле с галочкой или отметкой при выборе. |
| CheckBoxTreeItem<T> | Подкласс TreeItem, который добавляет поддержку состояний выбранного, не выбранного и неопределённого. |
| CheckBoxTreeItem.TreeModificationEvent<T> | Класс TreeModificationEvent, который работает аналогично классу TreeItem.TreeModificationEvent, в том смысле, что данное событие будет подниматься вверх по иерархии CheckBoxTreeItem, пока родительский узел не станет нулевым. |
| CheckMenuItem | Элемент меню, который можно переключать между выбранным и не выбранным состояниями. |
| ChoiceBox<T> | ChoiceBox используется для представления пользователю небольшого набора предопределённых вариантов, из которых он может выбрать. |
| ChoiceDialog<T> | Диалоговое окно, которое отображает пользователю список вариантов, из которых он может выбрать не более одного элемента. |
| ColorPicker | Элемент управления ColorPicker позволяет пользователю выбрать цвет из стандартной палитры цветов с помощью простого нажатия или определить собственный цвет. |
| ComboBox<T> | Реализация абстрактного класса ComboBoxBase для наиболее распространённой формы ComboBox, где пользователю отображается всплывающий список, предоставляющий варианты выбора. |
| ComboBoxBase<T> | Абстрактный базовый класс для элементов управления ComboBox. |
| ConstrainedColumnResizeBase | Базовый класс для политики ограниченного изменения размера столбца. |
| ContentDisplay | Позиция для размещения содержимого в Label. |
| ContextMenu | Всплывающее меню, содержащее ObservableList элементов меню. |
| Control | Базовый класс для всех элементов управления пользовательским интерфейсом. |
| CustomMenuItem | |
| DateCell | DateCell используется DatePicker для рендеринга отдельных ячеек сетки в календаре месяца. |
| DatePicker | Элемент управления DatePicker позволяет пользователю вводить дату в виде текста или выбирать дату из всплывающего календаря. |
| Dialog<R> | Диалоговое окно JavaFX оборачивает DialogPane и предоставляет необходимый API для его отображения пользователям. |
| DialogEvent | Событие, связанное с отображением/скрытием диалогового окна. |
| DialogPane | DialogPane следует рассматривать как корневой узел, отображаемый в экземпляре Dialog. |
| FocusModel<T> | Абстрактный базовый класс для реализации FocusModel. |
| Hyperlink | Элемент, подобный HTML-метке, который может быть графическим и/или текстовым, реагирующим на наведение курсора и щелчки. |
| IndexedCell<T> | Реализация Cell с свойством индекса, которое отображает данные модели, лежащие в основе визуализации. |
| IndexRange | Класс, представляющий непрерывный диапазон целочисленных значений. |
| Label | Label — это элемент управления текстом, который нельзя редактировать. |
| Labeled | Элемент управления Labeled — это элемент управления, который имеет в своём пользовательском интерфейсе текстовое содержимое. |
| ListCell<T> | |
| ListView<T> | ListView отображает горизонтальный или вертикальный список элементов, из которых пользователь может выбрать или с которыми может взаимодействовать. |
| ListView.EditEvent<T> | Подкласс Event, используемый в ListView для представления событий, связанных с редактированием. |
| Menu | Всплывающее меню действий, отображаемое пользователю только по запросу. |
| MenuBar | Элемент управления MenuBar традиционно размещается в верхней части пользовательского интерфейса и содержит в себе Menus. |
| MenuButton | MenuButton — это кнопка, которая при нажатии отображает ContextMenu. |
| MenuItem | Элемент MenuItem предназначен для использования в сочетании с Menu для предоставления вариантов пользователю. |
| MultipleSelectionModel<T> | Абстрактный класс, расширяющий SelectionModel для добавления API, поддерживающего множественный выбор. |
| OverrunStyle | Определяет поведение метки элемента управления, когда область для отображения текста меньше области, необходимой для отображения всей строки. |
| Pagination | Элемент управления Pagination используется для навигации между страницами единого содержимого, разделённого на меньшие части. |
| PasswordField | Поле ввода текста, маскирующее вводимые символы. |
| PopupControl | Расширение PopupWindow, позволяющее использовать стили CSS. |
| ProgressBar | Специализация ProgressIndicator, представленная горизонтальной полосой. |
| ProgressIndicator | Круговой элемент управления, используемый для индикации прогресса, либо бесконечного (т.е. неопределённого), либо конечного. |
| RadioButton | RadioButton создаёт серию элементов, где только один элемент может быть выбран. |
| RadioMenuItem | |
| ResizeFeaturesBase<S> | Класс-обёртка, используемый политиками изменения размера столбцов, предлагаемыми такими элементами управления, как TableView и TreeTableView. |
| ScrollBar | Горизонтальная или вертикальная полоса прокрутки с кнопками увеличения и уменьшения и «кнопкой» (thumb), с которой пользователь может взаимодействовать. |
| ScrollPane | Элемент управления, обеспечивающий прокручиваемый, обрезанный (clipped) viewport своего содержимого. |
| ScrollPane.ScrollBarPolicy | Перечисление, обозначающее политику, используемую прокручиваемым элементом управления для решения вопроса о том, показывать ли полосу прокрутки. |
| ScrollToEvent<T> | Событие, связанное с ScrollPane и виртуализированными элементами управления, такими как ListView, TableView, TreeView и TreeTableView. |
| SelectionMode | Перечисление, используемое для указания, сколько элементов может быть выбрано в MultipleSelectionModel. |
| SelectionModel<T> | SelectionModel — абстрактный класс, используемый элементами пользовательского интерфейса для предоставления согласованного API для управления выделением. |
| Separator | Горизонтальная или вертикальная разделительная линия. |
| SeparatorMenuItem | A MenuItem что, как следует из названия, позволяет встраивать горизонтальную разделительную линию, назначив Separator свойству content CustomMenuItem. Это сделано для удобства, так как группы menuitems могут быть разделены разделителем. |
| SingleSelectionModel<T> | SelectionModel, который требует, чтобы в любой момент времени был выбран только один индекс. |
| Skin<C extends Skinnable> | Интерфейс для определения визуального представления элементов управления пользовательского интерфейса. |
| SkinBase<C extends Control> | Базовый класс реализации для определения визуального представления элементов управления пользовательского интерфейса, определяя графический интерфейс узлов, которые представляют собой skin. |
| Skinnable | Интерфейс Skinnable реализуется классом Control и, следовательно, реализуется всеми реализациями Control. |
| Slider | Элемент управления Slider используется для отображения непрерывного или дискретного диапазона допустимых числовых значений и позволяет пользователю взаимодействовать с элементом управления. |
| SortEvent<C> | Событие, связанное с сортировкой TableView и TreeTableView. |
| Spinner<T> | Однострочное поле ввода, позволяющее пользователю выбирать число или значение объекта из упорядоченной последовательности. |
| SpinnerValueFactory<T> | SpinnerValueFactory — модель, стоящая за JavaFX Spinner control — без установленного фабрики значений Spinner неприменим. |
| SpinnerValueFactory.DoubleSpinnerValueFactory | Реализация SpinnerValueFactory, предназначенная для итерации по значениям типа double. |
| SpinnerValueFactory.IntegerSpinnerValueFactory | Реализация SpinnerValueFactory, предназначенная для итерации по целочисленным значениям. |
| SpinnerValueFactory.ListSpinnerValueFactory<T> | Реализация SpinnerValueFactory, предназначенная для итерации по списку значений. |
| SplitMenuButton | SplitMenuButton, как и MenuButton, тесно связан с концепцией выбора MenuItem из меню. |
| SplitPane | Элемент управления, имеющий две или более сторон, разделённых разделителями, которые пользователь может перетаскивать, чтобы увеличить пространство для одной из сторон, в результате чего другая сторона уменьшается на равную величину. |
| SplitPane.Divider | Представляет собой отдельный разделитель в SplitPane. |
| Tab | Вкладки размещаются в TabPane, где каждая вкладка представляет собой отдельную «страницу». |
|
TableCell<S, |
Представляет собой пересечение строки/столбца в TableView. |
|
TableColumn<S, |
Таблица TableView состоит из нескольких TableColumn. |
|
TableColumn.CellDataFeatures<S, |
Вспомогательный класс, используемый в TableColumn в качестве класса-обёртки, чтобы предоставить всю необходимую информацию для конкретной Cell. |
|
TableColumn.CellEditEvent<S, |
Событие, которое срабатывает, когда пользователь выполняет редактирование ячейки таблицы. |
| TableColumn.SortType | Перечисление, которое определяет тип сортировки, применяемой к определённому столбцу. |
|
TableColumnBase<S, |
Табличные элементы управления (такие как TableView и TreeTableView) состоят из нуля или более экземпляров подкласса TableColumnBase (TableColumn и TreeTableColumn соответственно). |
|
TableFocusModel<T, |
Абстрактный базовый класс для реализаций FocusModel, используемых в табличных элементах управления (в частности, TableView и TreeTableView). |
|
TablePosition<S, |
Этот класс используется для представления одной строки/столбца/ячейки в TableView. |
| TablePositionBase<TC extends TableColumnBase> | Этот класс используется для представления одной строки/столбца/ячейки в таблице. |
| TableRow<T> | TableRow является IndexedCell, но разработчики, создающие экземпляры TableView, редко им пользуются. |
| TableSelectionModel<T> | Абстрактный базовый класс для реализаций MultipleSelectionModel, используемых в табличных элементах управления (в частности, TableView и TreeTableView). |
| TableView<S> | Элемент управления TableView предназначен для визуализации неограниченного числа строк данных, разбитых на столбцы. |
| TableView.ResizeFeatures<S> | Неизменяемый оберточный класс для использования в функциональности TableView column resize. |
| TableView.TableViewFocusModel<S> | A FocusModel с дополнительными возможностями для поддержки требований элемента управления TableView. |
| TableView.TableViewSelectionModel<S> | Простое расширение абстрактного класса SelectionModel для обеспечения специальной поддержки элементов управления TableView. |
| TabPane | Элемент управления, позволяющий переключаться между группой Tabs. |
| TabPane.TabClosingPolicy | Определяет, как TabPane обрабатывает закрытие вкладок с точки зрения конечного пользователя. |
| TabPane.TabDragPolicy | Это перечисление определяет политики перетаскивания вкладок в TabPane. |
| TextArea | Компонент ввода текста, который позволяет пользователю вводить несколько строк простого текста. |
| TextField | Компонент ввода текста, который позволяет пользователю вводить одну строку неформатированного текста. |
| TextFormatter<V> | Форматтер описывает формат TextInputControl текста, используя два разных механизма: фильтр (TextFormatter.getFilter()), который может перехватывать и изменять ввод пользователя. |
| TextFormatter.Change | Содержит состояние, представляющее изменение содержимого или выделения для TextInputControl. |
| TextInputControl | Абстрактный базовый класс для элементов управления вводом текста. |
| TextInputControl.Content | Интерфейс, представляющий содержимое элемента управления вводом текста. |
| TextInputDialog | Диалоговое окно, отображающее элемент управления вводом текста пользователю. |
| TitledPane | TitledPane — это панель с заголовком, которую можно открывать и закрывать. |
| Toggle | Представляет элемент управления, который можно переключать между выбранным и не выбранным состояниями. |
| ToggleButton | ToggleButton — это специализированный элемент управления, который может быть выбран. |
| ToggleGroup | Класс, содержащий ссылку на все Toggles, чьи selected переменные должны управляться таким образом, чтобы только один внутри ToggleGroup мог быть выбран в любой момент времени. |
| ToolBar | ToolBar — это элемент управления, который отображает элементы горизонтально или вертикально. |
| Tooltip | Подсказки — это распространённые элементы пользовательского интерфейса, которые обычно используются для отображения дополнительной информации о узле в дереве сцены, когда пользователь наводит на него курсор. |
| TreeCell<T> | |
| TreeItem<T> | Модель для одного узла, предоставляющая иерархию значений для элемента управления, такого как TreeView. |
| TreeItem.TreeModificationEvent<T> | Событие Event, которое содержит релевантную информацию обо всех формах модификаций TreeItem. |
| TreeSortMode | Определяет, как элементы дерева в пользовательских интерфейсах типа «дерево» должны сортироваться. |
|
TreeTableCell<S, |
Представляет пересечение одной строки/столбца в TreeTableView. |
|
TreeTableColumn<S, |
A TreeTableView состоит из ряда экземпляров TreeTableColumn. |
|
TreeTableColumn.CellDataFeatures<S, |
Вспомогательный класс, используемый в TreeTableColumn в качестве оберточного класса для предоставления всей необходимой информации для конкретной Cell. |
|
TreeTableColumn.CellEditEvent<S, |
Событие, которое срабатывает, когда пользователь производит редактирование в ячейке таблицы. |
| TreeTableColumn.SortType | Перечисление, определяющее тип сортировки, применяемой к определённому столбцу. |
|
TreeTablePosition<S, |
Этот класс используется для представления одной строки/столбца/ячейки в TreeTableView. |
| TreeTableRow<T> | TreeTableRow является IndexedCell, но разработчики, создающие экземпляры TreeTableView, редко им пользуются. |
| TreeTableView<S> | Элемент управления TreeTableView предназначен для визуализации неограниченного числа строк данных, разбитых на столбцы. |
| TreeTableView.EditEvent<S> | Подкласс Event, используемый в TreeTableView для представления событий, связанных с редактированием. |
| TreeTableView.ResizeFeatures<S> | Неизменяемый оберточный класс для использования в функциональности column resize TableView. |
| TreeTableView.TreeTableViewFocusModel<S> | Модель FocusModel с дополнительными функциями, поддерживающими требования управления TableView. |
| TreeTableView.TreeTableViewSelectionModel<S> | Простое расширение абстрактного класса SelectionModel для специальной поддержки управления TreeTableView. |
| TreeView<T> | Управление TreeView предоставляет представление корня дерева (типа TreeItem). |
| TreeView.EditEvent<T> | Подкласс Event, используемый в TreeView для представления событий, связанных с редактированием. |
© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.