Пакет 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 наследуется от Parent, и поэтому не является листом. С точки зрения разработчика или дизайнера Элемент управления во многих случаях можно рассматривать как лиственный узел. Например, разработчик или дизайнер может рассматривать кнопку как прямоугольник или другой простой лиственный узел.
Поскольку Элемент управления может изменять размеры, он будет автоматически изменён до своего предпочтительного размера на каждом импульсе дерева сцены. Установка ширины и высоты Элемента управления не влияет на его предпочтительный размер. При использовании в контейнере компоновки ограничения компоновки, наложенные на Элемент управления (или указанные вручную на Элементе управления), определяют, как он позиционируется и масштабируется.
Скин Элемента управления может быть изменен в любое время. Это помечает Элемент управления как требующий компоновки, так как изменение скина, вероятно, изменило предпочтительный размер Элемента управления. Если при создании Элемента управления не указан Скин, для всех встроенных элементов управления будет предоставлен дефолтный Скин на основе CSS.
Каждый Элемент управления может иметь необязательный всплывающую подсказку. Всплывающая подсказка — это Элемент управления, который отображает некоторую (обычно текстовую) информацию о элементе управления пользователю, когда курсор мыши находится над элементом управления в течение определенного времени. Его можно стилизовать с помощью CSS так же, как и другие Элементы управления.
focusTraversable по умолчанию переопределяется в Control как true, в то время как в Node по умолчанию — false. Элементы управления, которые по умолчанию не должны быть фокусируемыми (например, Label), переопределяют это значение на false.
Функции getMinWidth, getMinHeight, getPrefWidth, getPrefHeight, getMaxWidth и getMaxHeight напрямую делегированы скину. Метод baselineOffset делегируется узлу скина. Не рекомендуется изменять эти делегирования подклассам.
Стилизация элементов управления
Существует два способа настройки внешнего вида элемента управления. Наиболее сложный, но гибкий подход — написать новый Скин для элемента управления, который точно реализует желаемый визуальный вид для элемента управления. См. документацию по Скину для получения дополнительной информации.
Самый простой и мощный метод стилизации встроенных элементов управления — использование CSS. Обратите внимание, что в этом выпуске данное описание CSS применимо только к стандартным Скинам, предоставляемым для встроенных элементов управления. В последующих выпусках это будет доступно для любых пользовательских элементов управления сторонних разработчиков, которые захотят воспользоваться возможностями CSS.
Каждый из стандартных скинов встроенных элементов управления состоит из нескольких индивидуально стилизуемых областей или регионов. Это очень похоже на HTML-страницу, которая состоит из <div>-элементов, а затем стилизуется с помощью CSS. Каждый отдельный регион может быть отрисован с фонами, границами, изображениями, отступами, полями и т.д. Поддержка CSS JavaFX включает возможность иметь несколько фонов и границ, а также выводить цвета. Эти возможности значительно облегчают изменение внешнего вида элементов управления в JavaFX с помощью CSS.
Цвета, используемые для отрисовки стандартных скинов встроенных элементов управления, основаны на базовом цвете, акцентном цвете и цвете фона. Простым изменением базового цвета элемента управления можно изменить производные градиенты и создать кнопки или другие элементы управления, которые визуально соответствуют стандартным скинам, но визуально выделяются.
Как и все остальные узлы в дереве сцены, элементы управления могут быть стилизованы с помощью внешнего стилевого файла или путем прямого указания стиля на элементе управления. Хотя для примеров проще выразить и понять, задавая стиль непосредственно на узле, рекомендуется использовать внешний стилевой файл и использовать styleClass или id элемента управления, как вы бы использовали «class» или «id» HTML-элемента с HTML-CSS.
Каждый UI-элемент управления указывает styleClass, который можно использовать для стилизации элементов управления из внешнего стилевого файла. Например, элементу управления кнопкой присваивается CSS-стилевый класс «button». Имена CSS-стилевых классов разделяются дефисами и написаны строчными буквами, в отличие от верблюжьего регистра. В противном случае они полностью идентичны. Например, Button — это «button», RadioButton — «radio-button», Tooltip — «tooltip» и так далее.
В документации по классу каждого элемента управления определены стандартные области скина, которые можно стилизовать. Для получения дополнительной информации о возможностях CSS, предоставляемых JavaFX, см. руководство по CSS.
| Интерфейс | Описание |
|---|---|
| Skin<C extends Skinnable> | Базовый класс для определения визуального представления элементов управления пользовательского интерфейса, определяя дерево сцены узлов для представления скина. |
| Skinnable | Интерфейс Skinnable реализуется классом Control, и поэтому реализуется всеми реализациями Control. |
| TextInputControl.Content | Интерфейс, представляющий содержимое элемента ввода текста. |
| Toggle | Представляет элемент управления, который может переключаться между выбранными и невыбранными состояниями. |
| Класс | Описание |
|---|---|
| Accordion | Акордеон — это группа TitlePanes. |
| Alert | Класс Alert наследуется от класса Dialog и предоставляет поддержку нескольких предопределённых типов диалоговых окон, которые можно легко показать пользователю для получения ответа. |
| Button | Простая кнопка. |
| ButtonBar | ButtonBar по существу является HBox с дополнительной функциональностью для размещения кнопок, специфичных для операционной системы. |
| 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. |
| 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 Control — это элемент управления, у которого в пользовательском интерфейсе есть связанный с ним текстовый контент. |
| ListCell<T> | |
| ListView<T> | ListView отображает горизонтальный или вертикальный список элементов, из которого пользователь может выбирать или с которыми может взаимодействовать. |
| ListView.EditEvent<T> | Подкласс Event, используемый в ListView для представления событий, связанных с редактированием. |
| Меню | Выпадающее меню доступных элементов, отображаемое пользователю только по запросу. |
|---|---|
| Панель меню | Элемент управления Панель меню традиционно размещается в самом верху пользовательского интерфейса, и в него встроены Menus. |
| Кнопка меню | Кнопка меню, при нажатии отображает ContextMenu. |
| Элемент меню | Элемент меню предназначен для использования совместно с Menu для предоставления пользователям вариантов. |
| Модель множественного выбора<T> | Абстрактный класс, расширяющий SelectionModel для добавления API, поддерживающего множественный выбор. |
| Пагинация | Элемент управления Пагинация используется для навигации между страницами единого контента, который был разделен на меньшие части. |
| Поле для пароля | Поле ввода текста, скрывающее введенные символы. |
| Контроль всплывающего окна | Расширение PopupWindow, позволяющее применять стили CSS. |
| Полоса прогресса | Специализация ProgressIndicator, представленная в виде горизонтальной полосы. |
| Показатель прогресса | Круговой элемент управления, используемый для отображения прогресса, либо бесконечного (т.е. неопределенного), либо конечного. |
| Радиокнопка | Радиокнопки создают серию элементов, где только один элемент может быть выбран. |
| Радиоэлемент меню | |
| Базовый класс функций изменения размера<S> | Неизменяемый класс-оболочка для использования политиками изменения размера столбцов, предлагаемыми такими элементами управления, как TableView и TreeTableView. |
| Скроллбар | Горизонтальная или вертикальная полоса прокрутки с кнопками увеличения и уменьшения и «ползунком», с которым пользователь может взаимодействовать. |
| Область прокрутки | Элемент управления, предоставляющий прокручиваемый, обрезанный область просмотра своего содержимого. |
| Событие прокрутки<T> | Событие, связанное с ScrollPane и виртуализированными элементами управления, такими как ListView, TableView, TreeView и TreeTableView. |
| Модель выбора<T> | Модель выбора — абстрактный класс, используемый элементами управления пользовательского интерфейса для обеспечения согласованного API для управления выбором. |
| Разделитель | Горизонтальная или вертикальная разделительная линия. |
| Разделитель меню | MenuItem, который, как следует из названия, позволяет встраивать горизонтальную разделительную линию, назначив Separator свойству content CustomMenuItem. Это сделано для удобства, так как группы menuitems могут быть разделены разделителем. |
| Модель единственного выбора<T> | Модель выбора, которая требует, чтобы в данный момент был выбран только один индекс. |
| Базовая оболочка<C extends Control> | Базовый класс реализации для определения визуального представления элементов управления пользовательского интерфейса, определением графа сцены узлов для представления skin. |
| Ползунок | Элемент управления Ползунок используется для отображения непрерывного или дискретного диапазона допустимых числовых значений и позволяет пользователю взаимодействовать с элементом управления. |
| Событие сортировки<C> | Событие, связанное с сортировкой TableView и TreeTableView. |
| Спиннер<T> | Однострочное текстовое поле, позволяющее пользователю выбирать число или значение объекта из упорядоченной последовательности. |
| Производитель значений Spinner<T> | Производитель значений Spinner — модель, стоящая за JavaFX Spinner control — без установленного производителя значений Spinner не может работать. |
| Производитель значений Spinner. DoubleSpinnerValueFactory | Реализация SpinnerValueFactory для работы с двойными значениями. |
| Производитель значений Spinner. IntegerSpinnerValueFactory | Реализация SpinnerValueFactory для работы с целыми значениями. |
| Производитель значений Spinner. ListSpinnerValueFactory<T> | Реализация SpinnerValueFactory для работы со списком значений. |
| Разделенная кнопка меню | Разделенная кнопка меню, как и MenuButton, тесно связана с выбором MenuItem из меню. |
| Разделительная панель | Элемент управления, имеющий две или более стороны, разделенные разделителем, который пользователь может перетаскивать, чтобы увеличить пространство на одной стороне, что приведет к уменьшению другой стороны на равную величину. |
| Разделитель панели | Представляет собой один разделитель в SplitPane. |
| Вкладка | Вкладки размещаются в TabPane, где каждая вкладка представляет собой отдельную 'страницу'. |
|---|---|
| TableCell<S,T> | Представляет собой пересечение одной строки/столбца в TableView. |
| TableColumn<S,T> | TableView состоит из нескольких TableColumn. |
| TableColumn.CellDataFeatures<S,T> | Вспомогательный класс, используемый в TableColumn в качестве оберточного класса для предоставления всей необходимой информации для конкретной Cell. |
| TableColumn.CellEditEvent<S,T> | Событие, которое генерируется при редактировании ячейки таблицы пользователем. |
| TableColumnBase<S,T> | Табличные элементы управления (например, TableView и TreeTableView) состоят из нуля или более экземпляров конкретного подкласса TableColumnBase (TableColumn и TreeTableColumn соответственно). |
| TableFocusModel<T,TC extends TableColumnBase<T,?>> | Абстрактный базовый класс для реализаций FocusModel, используемых в табличных элементах управления (в основном TableView и TreeTableView). |
| TablePosition<S,T> | Этот класс используется для представления одной строки/столбца/ячейки в 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. |
| TextArea | Компонент ввода текста, который позволяет пользователю вводить несколько строк простого текста. |
| TextField | Компонент ввода текста, который позволяет пользователю вводить одну строку неформатированного текста. |
| TextFormatter<V> | Форматировщик описывает формат TextInputControl текста, используя два разных механизма: фильтр (TextFormatter.getFilter()), который может перехватывать и изменять ввод пользователя. |
| TextFormatter.Change | Содержит состояние, представляющее изменение содержимого или выбора для TextInputControl. |
| TextInputControl | Абстрактный базовый класс для элементов управления вводом текста. |
| TextInputDialog | Диалоговое окно, отображающее элемент управления вводом текста пользователю. |
| TitledPane | TitledPane — это панель с заголовком, которую можно открывать и закрывать. |
| ToggleButton | ToggleButton — это специализированный элемент управления, который может быть выбран. |
| ToggleGroup | Класс, содержащий ссылку на все Toggles, чьи переменные selected должны управляться таким образом, чтобы только один в ToggleGroup мог быть выбран в любой момент. |
| ToolBar | Элемент управления ToolBar отображает элементы горизонтально или вертикально. |
| Tooltip | Подсказки — это распространенные элементы пользовательского интерфейса, которые обычно используются для отображения дополнительной информации о узле в дереве сцены, когда на узел наводят указатель мыши. |
| TreeCell<T> | |
| TreeItem<T> | Модель для отдельного узла, обеспечивающая иерархию значений для элемента управления, такого как TreeView. |
| TreeItem.TreeModificationEvent<T> | Event, содержащий релевантную информацию обо всех формах изменений TreeItem. |
| TreeTableCell<S,T> | Представляет собой пересечение одной строки/столбца в TreeTableView. |
| TreeTableColumn<S,T> | A TreeTableView состоит из ряда экземпляров TreeTableColumn. |
|---|---|
| TreeTableColumn.CellDataFeatures<S,T> | Вспомогательный класс, используемый в TreeTableColumn в качестве оболочки для предоставления всей необходимой информации для конкретной ячейки Cell. |
| TreeTableColumn.CellEditEvent<S,T> | Событие, которое генерируется при редактировании пользователем ячейки таблицы. |
| TreeTablePosition<S,T> | Этот класс используется для представления одной строки/столбца/ячейки в TreeTableView. |
| TreeTableRow<T> | TreeTableRow является IndexedCell, но разработчики, создающие экземпляры TreeTableView, редко им пользуются. |
| TreeTableView<S> | Элемент управления TreeTableView предназначен для визуализации неограниченного количества строк данных, разбитых на столбцы. |
| TreeTableView.EditEvent<S> | Подкласс Event, используемый в TreeTableView для представления событий, связанных с редактированием. |
| TreeTableView.ResizeFeatures<S> | Неизменяемый оберточный класс для использования в функциональности TableView column resize. |
| TreeTableView.TreeTableViewFocusModel<S> | A FocusModel с дополнительными функциями, поддерживающими требования элемента управления TableView. |
| TreeTableView.TreeTableViewSelectionModel<S> | Простое расширение абстрактного класса SelectionModel, позволяющее обеспечить специальную поддержку элементов управления TreeTableView. |
| TreeView<T> | Элемент управления TreeView предоставляет представление к корню дерева (типа TreeItem). |
| TreeView.EditEvent<T> | Подкласс Event, используемый в TreeView для представления событий, связанных с редактированием. |
| Перечисление | Описание |
|---|---|
| Alert.AlertType | Перечисление, содержащее доступные предопределённые типы сообщений об ошибках, которые класс Alert может использовать для предварительной подготовки различных свойств. |
| ButtonBar.ButtonData | Перечисление всех доступных аннотаций данных кнопки. |
| ContentDisplay | Позиция для размещения содержимого в Label. |
| OverrunStyle | Определяет поведение метки Control, когда пространство для отображения текста меньше, чем необходимо для отображения всей строки. |
| ScrollPane.ScrollBarPolicy | Перечисление, обозначающее политику, используемую управляемым элементом прокрутки для определения того, следует ли отображать полосу прокрутки. |
| SelectionMode | Перечисление, используемое для указания количества элементов, которые можно выбрать в MultipleSelectionModel. |
| TableColumn.SortType | Перечисление, определяющее тип сортировки, применяемый к конкретному столбцу. |
| TabPane.TabClosingPolicy | Это определяет, как TabPane обрабатывает закрытие вкладок с точки зрения конечного пользователя. |
| TabPane.TabDragPolicy | Это перечисление определяет политики перетаскивания вкладок в TabPane. |
| TreeSortMode | Определяет, как должны сортироваться элементы дерева в управляемых элементах пользовательского интерфейса типа «дерево». |
| TreeTableColumn.SortType | Перечисление, определяющее тип сортировки, применяемый к конкретному столбцу. |
© 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.