Пакет 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
Control наследуется от Parent и, следовательно, не является листом. С точки зрения разработчика или дизайнера Control можно рассматривать как лист в большинстве случаев. Например, кнопку можно рассматривать как прямоугольник или другой простой лист.
Поскольку Control масштабируемый, он автоматически масштабируется до своего предпочтительного размера на каждом импульсе графической системы. Установка ширины и высоты Control не влияет на его предпочтительный размер. При использовании в контейнере компоновки ограничения компоновки, наложенные на Control (или указанные вручную на Control), будут определять его положение и размер.
Skin Control можно изменить в любое время. Это отметит Control как нуждающийся в расположении, так как изменение Skin, вероятно, изменило предпочтительный размер Control. Если Skin не указан во время создания Control, для всех встроенных Control будет предоставлен стандартный Skin, основанный на CSS.
Каждый Control может иметь необязательный подсказку. Подсказка — это Control, который отображает некоторую (обычно текстовую) информацию о элементе управления пользователю, когда курсор мыши находится над элементом управления некоторое время. Он может стилизоваться через CSS, как и другие Control.
focusTraversable в Control переопределяется в значение true по умолчанию, в то время как в Node — false по умолчанию. Элементы управления, которые по умолчанию не должны быть фокусируемыми (такие как Label), переопределяют это значение на false.
Функции getMinWidth, getMinHeight, getPrefWidth, getPrefHeight, getMaxWidth и getMaxHeight напрямую делегированы Skin. Метод baselineOffset делегирован узлу Skin. Не рекомендуется изменять эти делегирования подклассам.
Стилизация элементов управления
Существует два метода настройки внешнего вида Control. Наиболее сложный, но гибкий подход заключается в написании нового Skin для Control, который точно реализует желаемый визуальный вид. Подробнее см. документацию по Skin.
Самый простой и мощный метод стилизации встроенных Control — использование CSS. Обратите внимание, что в этом выпуске данное описание CSS применимо только к стандартным Skin, предоставляемым для встроенных Control. В последующих версиях это будет доступно для любых пользовательских Control сторонних разработчиков, которые захотят воспользоваться этими возможностями CSS.
Каждый из стандартных Skin для встроенных Control состоит из нескольких отдельных стилизуемых областей или регионов. Это похоже на HTML-страницу, состоящую из <div> и стилизованную с помощью CSS. Каждый отдельный регион может быть нарисован с фоном, границами, изображениями, отступами, отступами и т. д. Поддержка CSS JavaFX включает возможность использования нескольких фонов и границ, а также наследования цветов. Эти возможности значительно упрощают изменение внешнего вида Control в JavaFX с помощью CSS.
Цвета, используемые для рисования стандартных Skin встроенных Control, все наследуются от базового цвета, акцентного цвета и цвета фона. Просто изменив базовый цвет Control, можно изменить полученные градиенты и создать кнопки или другие Control, которые визуально соответствуют стандартным Skin, но выглядят иначе.
Как и все остальные узлы в графической системе, Control можно стилизовать с помощью внешнего стилевого файла или указав стиль непосредственно на Control. Хотя для примеров проще выразить и понять, указав стиль непосредственно на узел, рекомендуется использовать внешний стилевой файл и использовать либо styleClass, либо id Control, так же, как вы использовали бы "class" или id HTML-элемента с HTML CSS.
Каждый UI-элемент управления указывает styleClass, который можно использовать для стилизации элементов управления из внешнего стилевого файла. Например, элементу управления Button присваивается CSS-класс "button". Имена CSS-классов разделены дефисами, написаны строчными буквами, а не с использованием camelCase, в противном случае они идентичны. Например, 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, пока родительский узел не станет null. |
| CheckMenuItem | Элемент меню MenuItem, который может переключаться между выбранным и не выбранным состояниями. |
| ChoiceBox<T> | ChoiceBox используется для предоставления пользователю относительно небольшого набора предопределённых вариантов, из которых он может выбрать один. |
| ChoiceDialog<T> | Диалог, отображающий пользователю список вариантов, из которого он может выбрать не более одного элемента. |
| ColorPicker | Элемент управления ColorPicker позволяет пользователю выбрать цвет из стандартной палитры цветов с помощью простого нажатия или определить свой собственный цвет. |
| ComboBox<T> | Реализация абстрактного класса ComboBoxBase для наиболее распространённого вида ComboBox, где пользователю отображается всплывающий список, предоставляющий варианты выбора. |
| ComboBoxBase<T> | Абстрактный базовый класс для элементов управления типа ComboBox. |
| ConstrainedColumnResizeBase | Базовый класс для политики ограничения изменения размера колонки. |
| ContentDisplay | Положение размещения содержимого в метке. |
| 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, содержащая свойство index, которое отображает индекс в модели данных, лежащей в основе визуализации. |
| IndexRange | Класс, представляющий непрерывный диапазон целочисленных значений. |
| Label | Label — это элемент управления текстом, который нельзя редактировать. |
| Labeled | Элемент управления Labeled — это Control с текстовым содержимым, ассоциированным с ним в интерфейсе пользователя. |
| 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 | Определяет поведение метки Control, когда пространство для отображения текста меньше, чем пространство, необходимое для отображения всей строки. |
| Pagination | Контрол Pagination используется для навигации между страницами одного содержимого, которое разделено на более мелкие части. |
| PasswordField | Поле ввода текста, маскирующее введённые символы. |
| PopupControl | Расширение PopupWindow, позволяющее использовать стили CSS. |
| ProgressBar | Специализация ProgressIndicator, представленная в виде горизонтальной полосы. |
| ProgressIndicator | Круговой контрол, используемый для индикации прогресса, либо бесконечного (т.е. неопределённого), либо конечного. |
| RadioButton | RadioButton создаёт набор элементов, где только один элемент может быть выбран. |
| RadioMenuItem | |
| ResizeFeaturesBase<S> | Класс-обёртка, используемый для политик изменения размера столбцов, предлагаемых такими контролами, как TableView и TreeTableView. |
| ScrollBar | Горизонтальная или вертикальная полоса со стрелками увеличения и уменьшения и «ползунком», с которым пользователь может взаимодействовать. |
| ScrollPane | Контрол, предоставляющий прокручиваемый, обрезной viewport содержимого. |
| ScrollPane.ScrollBarPolicy | Перечисление, обозначающее политику, используемую прокручиваемым Control для решения вопроса о показе полосы прокрутки. |
| ScrollToEvent<T> | Событие, связанное с ScrollPane и виртуализированными контролами, такими как ListView, TableView, TreeView и TreeTableView. |
| SelectionMode | Перечисление, используемое для указания, сколько элементов может быть выбрано в MultipleSelectionModel. |
| SelectionModel<T> | SelectionModel — абстрактный класс, используемый элементами пользовательского интерфейса для предоставления согласованного API для поддержки выбора. |
| Separator | Горизонтальная или вертикальная разделительная линия. |
| SeparatorMenuItem | 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> | A 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> | A subclass of Event specifically used in TreeTableView for representing edit-related events. |
| TreeTableView.ResizeFeatures<S> | An immutable wrapper class for use with the TableView column resize functionality. |
| TreeTableView.TreeTableViewFocusModel<S> | A FocusModel with additional functionality to support the requirements of a TableView control. |
| TreeTableView.TreeTableViewSelectionModel<S> | A simple extension of the SelectionModel abstract class to provide special support for TreeTableView controls. |
| TreeView<T> | The TreeView control provides a view of a tree root (of type TreeItem). |
| TreeView.EditEvent<T> | A subclass of Event used specifically in TreeView for representing edit-related events. |
© 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.