Пакет 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. Каждый элемент управления имеет ссылку на единственный Skin, который является реализацией представления для элемента управления. Control делегирует Skin ответственность за вычисление минимальных, максимальных и предпочтительных размеров элемента управления, смещения базовой линии и проверки попадания в область (содержания и пересечения). Также ответственность Skin, или делегата Skin, заключается в реализации и реагировании на все соответствующие события нажатия клавиш, возникающие на элементе управления, когда он содержит фокус.
Control
Control наследуется от Parent, и поэтому не является листом. С точки зрения разработчика или дизайнера Control можно рассматривать как лист в большинстве случаев. Например, разработчик или дизайнер может рассматривать кнопку как прямоугольник или другой простой лист.
Поскольку элемент управления может изменять размер, он будет автоматически изменять размер до своего предпочтительного размера на каждом цикле графического дерева. Установка ширины и высоты элемента управления не влияет на его предпочтительный размер. При использовании в контейнере компоновки ограничения компоновки, наложенные на элемент управления (или заданные вручную на элементе управления), определяют его позиционирование и размер.
Skin элемента управления может быть изменен в любое время. Это пометит элемент управления как нуждающийся в перекомпоновке, так как изменение Skin, вероятно, изменило предпочтительный размер элемента управления. Если Skin не указан в момент создания элемента управления, для всех встроенных элементов управления будет предоставлен по умолчанию skin на основе CSS.
Каждый элемент управления может иметь необязательный подсказку. Подсказка — это элемент управления, который отображает некоторую (обычно текстовую) информацию о элементе управления пользователю, когда курсор мыши находится над элементом управления в течение некоторого времени. Его можно стилизовать с помощью CSS так же, как и другие элементы управления.
focusTraversable переопределяется в Control как true по умолчанию, в то время как в Node он по умолчанию false. Элементы управления, которые по умолчанию не должны быть фокусируемыми (например, Label), переопределяют это значение на false.
Функции getMinWidth, getMinHeight, getPrefWidth, getPrefHeight, getMaxWidth и getMaxHeight напрямую делегируются Skin. Метод baselineOffset делегируется узлу Skin. Не рекомендуется подклассам изменять эти делегирования.
Стилизация элементов управления
Есть два способа настройки внешнего вида элемента управления. Наиболее сложный, но гибкий подход — создание нового Skin для элемента управления, который точно реализует желаемый визуальный вид элемента управления. Для получения дополнительной информации см. документацию по Skin.
Самый простой и очень мощный метод стилизации встроенных элементов управления — использование CSS. Обратите внимание, что в этом релизе данное описание CSS применяется только к скинам по умолчанию, предоставляемым для встроенных элементов управления. В последующих выпусках это будет доступно для любых пользовательских элементов управления сторонних разработчиков, которые хотят воспользоваться этими возможностями CSS.
Каждый из скинов по умолчанию для встроенных элементов управления состоит из нескольких индивидуально стилизуемых областей или регионов. Это очень похоже на HTML-страницу, которая состоит из <div> элементов, а затем стилизуется с помощью CSS. Каждый отдельный регион может быть нарисован с фоном, границами, изображениями, отступами, отступами и так далее. Поддержка CSS в JavaFX включает возможность наличия нескольких фонов и границ и вывода цветов. Эти возможности делают очень простым изменение внешнего вида элементов управления в JavaFX с помощью CSS.
Цвета, используемые для рисования скинов по умолчанию встроенных элементов управления, все выводятся из базового цвета, акцентного цвета и цвета фона. Просто изменив базовый цвет элемента управления, можно изменить выводимые градиенты и создать кнопки или другие элементы управления, которые визуально соответствуют скинам по умолчанию, но при этом выделяются.
Как и все другие узлы в графическом дереве, элементы управления могут быть стилизованы с помощью внешнего файла стилей или путем прямого указания стиля на элементе управления. Хотя для примеров проще выразить и понять, указав стиль непосредственно на узле, рекомендуется использовать внешний файл стилей и использовать styleClass или id элемента управления, как вы бы использовали «класс» или id HTML-элемента в HTML CSS.
Каждый UI-элемент управления указывает styleClass, который может быть использован для стилизации элементов управления из внешнего файла стилей. Например, элементу управления Button присваивается CSS-класс «кнопка». Имена CSS-классов разделяются дефисом, а не в camelCase, в противном случае они точно такие же. Например, Button — «кнопка», RadioButton — «radio-button», Tooltip — «tooltip» и т. д.
В документации к классу каждого элемента управления определены регионы скинов по умолчанию, которые можно стилизовать. Для получения дополнительной информации о возможностях CSS, предоставляемых JavaFX, см. Руководство по справке CSS.
-
Краткое описание интерфейсов Интерфейс Описание Skin<C extends Skinnable> Базовый класс для определения визуального представления элементов управления пользовательского интерфейса путём определения графического дерева узлов для представления skin.Skinnable Интерфейс Skinnable реализован классомControl, и поэтому реализуется всеми реализациями Control.TextInputControl.Content Интерфейс, представляющий содержимое текстового поля ввода.Toggle Представляет элемент управления, который можно переключать между состояниями выбранного и невыбранного. -
Краткое описание классов Класс Описание
Accordion Акордеон — это группаTitlePanes.Alert Класс Alert наследуется от классаDialogи предоставляет поддержку ряда предопределённых типов диалоговых окон, которые можно легко отобразить пользователю, чтобы запросить ответ.Button Простая кнопка.ButtonBar ButtonBar — это по сутиHBoxс дополнительной функциональностью для размещения кнопок в соответствии со спецификой операционной системы.ButtonBase Базовый класс для кнопочных элементов пользовательского интерфейса, включая гиперссылки, кнопки, переключаемые кнопки, флажки и радиокнопки.ButtonType Класс ButtonType используется в API JavaFXDialog(точнее, APIDialogPane), чтобы указать какие кнопки должны отображаться пользователю в диалоговых окнах.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 Всплывающее меню, содержащее список элементов меню.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 для представления событий, связанных с редактированием.Menu Всплывающее меню с элементами управления, которое отображается пользователю только по запросу.
MenuBar Панель меню традиционно размещается в самом верху пользовательского интерфейса, и в нее встроеныMenus.MenuButton Кнопка меню, которая при нажатии отображаетContextMenu.MenuItem Элемент меню предназначен для использования совместно сMenu, чтобы предоставить пользователю варианты.MultipleSelectionModel<T> Абстрактный класс, расширяющийSelectionModelдля добавления API, поддерживающего множественный выбор.Pagination Пагинация используется для навигации между страницами единого содержимого, которое разделено на более мелкие части.PasswordField Поле ввода текста, маскирующее вводимые символы.PopupControl Расширение PopupWindow, позволяющее применять стили CSS.ProgressBar Специализация ProgressIndicator, представленная в виде горизонтальной полосы.ProgressIndicator Круговой элемент управления, используемый для отображения хода выполнения, либо бесконечного (т.е. неопределенного), либо конечного.RadioButton Радиокнопки создают набор элементов, где можно выбрать только один.RadioMenuItem ResizeFeaturesBase<S> Неизменяемый оберточный класс для использования в политиках изменения размера столбцов, предлагаемых элементами управления, такими какTableViewиTreeTableView.ScrollBar Горизонтальная или вертикальная полоса прокрутки с кнопками увеличения и уменьшения и «кнопкой» для взаимодействия пользователя.ScrollPane Элемент управления, обеспечивающий прокручиваемый, обрезаемый область видимости содержимого.ScrollToEvent<T> Событие, связанное сScrollPaneи виртуализированными элементами управления, такими какListView,TableView,TreeViewиTreeTableView.SelectionModel<T> SelectionModel — абстрактный класс, используемый элементами управления пользовательского интерфейса для предоставления согласованного API для управления выбором.Separator Горизонтальная или вертикальная разделительная линия.SeparatorMenuItem ЭлементMenuItem, который, как следует из названия, позволяет вставить горизонтальную разделительную линию, назначивSeparatorсвойствуcontentэлементаCustomMenuItem. Это сделано для удобства, так как группыmenuitemsмогут быть разделены разделителем.SingleSelectionModel<T> Модель выбора, которая требует, чтобы в любой момент времени был выбран только один индекс.SkinBase<C extends Control> Базовый реализующий класс для определения визуального представления элементов управления пользовательским интерфейсом, определением графического представления узлов для представленияskin.Slider Слайдер используется для отображения непрерывного или дискретного диапазона допустимых числовых значений, позволяя пользователю взаимодействовать с элементом управления.SortEvent<C> Событие, связанное с сортировкойTableViewиTreeTableView.Spinner<T> Однострочное текстовое поле, позволяющее пользователю выбрать числовое или объектное значение из упорядоченной последовательности.SpinnerValueFactory<T> SpinnerValueFactory — модель, стоящая за JavaFXSpinner control— без установленного фабрики значений Spinner не может быть использован.SpinnerValueFactory.DoubleSpinnerValueFactory РеализацияSpinnerValueFactory, предназначенная для итерации по значениям с плавающей точкой двойной точности.SpinnerValueFactory.IntegerSpinnerValueFactory РеализацияSpinnerValueFactory, предназначенная для итерации по целочисленным значениям.SpinnerValueFactory.ListSpinnerValueFactory<T> РеализацияSpinnerValueFactory, предназначенная для итерации по списку значений.SplitMenuButton SplitMenuButton, как иMenuButton, тесно связан с понятием выбораMenuItemиз меню.SplitPane Элемент управления, имеющий две или более сторон, каждая разделена разделителем, который пользователь может перетаскивать, чтобы дать больше места одной из сторон, в результате чего другая сторона уменьшится на равную величину.SplitPane.Divider Представляет собой отдельный разделитель в SplitPane.Tab Вкладки размещаются внутри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> Неизменяемый оберточный класс, используемый для функциональности TableViewcolumn resize.TableView.TableViewFocusModel<S> 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должны управляться таким образом, чтобы только одинвToggleToggleGroupмог быть выбран в любое время.ToolBar ToolBar — это элемент управления, который отображает элементы горизонтально или вертикально.Tooltip Подсказки — это общие элементы пользовательского интерфейса, которые обычно используются для отображения дополнительной информации о узле в дереве сцены, когда на узел наводится курсор мыши.TreeCell<T> TreeItem<T> Модель для одного узла, предоставляющего иерархию значений для элемента управления, такого какTreeView.TreeItem.TreeModificationEvent<T> Event, содержащий релевантную информацию для всех форм изменений TreeItem.TreeTableCell<S,T> Представляет пересечение одной строки/столбца вTreeTableView.TreeTableColumn<S,T> 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> Неизменяемый класс-обёртка для использования в функциональности TableViewcolumn resize.TreeTableView.TreeTableViewFocusModel<S> Модель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.