Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин Страница 32
Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин читать онлайн бесплатно
Метод setContentDisplay определяет расположение графического объекта относительно текста в кнопке.
Метод setUnderline подчеркивает текст кнопки.
Метод setWrapText переносит непомещающийся текст на другую строку.
Если установить свойство cancelButton со значением true, тогда кнопка будет активироваться клавишей Esc, а не клавишей Enter.
Порядок наложения одного узла на другой определяется очередностью добавления узлов графа сцены в его корневой узел.
Однако данный порядок можно менять с помощью методов toBack () и toFront ().
Архитектура компонентов управления и MVC
Кнопка Button относится к пакету scene.control компонентов управления интерфейса пользователя.
Все компоненты управления происходят от класса Control, который, в свою очередь, является областью Region, которая является узлом Node.
Класс Control реализует интерфейс Skinnable, который имеет методы getSkin и setSkin.
Таким образом, каждый элемент управления имеет ссылку на единственный объект Skin, который представляет собой реализацию представления View архитектуры MVC для элемента управления.
Кроме того, имеются CSS стили для определения свойств визуального представления элемента управления, так как класс Control реализует интерфейс Styleable и имеет метод getUserAgentStylesheet, который возвращает CSS стили элемента.
Элемент управления делегирует объекту Skin ответственность за вычисление минимальных, максимальных и предпочтительных размеров элемента управления.
Также, скин работает как менеджер компоновки для своих дочерних элементов.
Кроме того, делегат Skin также несет ответственность за реализацию и реагирование на все события, которые происходят в элементе управления, когда он содержит фокус, то есть объект Skin отвечает за реализацию поведения элемента управления.
Объект Skin реализует поведение элемента управления с помощью класса BehaviorBase.
Объект Skin элемента управления может быть изменен в любое время.
Это будет означать, что элемент управления должен быть перекомпонован, так как смена скина, скорее всего, изменит предпочтительный размер элемента управления.
Элементы управления соответствуют классическому шаблону проектирования MVC.
Класс Control – это «модель».
Он содержит как состояние компонента, так и методы, которые манипулируют этим состоянием.
Сам объект Control не знает, как он отображается или что такое взаимодействие пользователя.
Эти задачи делегируются объекту Skin («view»).
Элемент управления пользовательским интерфейсом создается с помощью конструктора.
После запуска конструктора больше ничего не происходит – не создается экземпляр скина, не выполняется компоновка, и не выполняются CSS стили.
На самом деле элемент управления будет иметь нулевую ширину и высоту.
В какой-то момент после создания нового экземпляра элемента управления, разработчик, скорее всего, разместит элемент управления в графе сцены, вызвав метод getChildren. аdd где-то в своем коде.
В этот момент элемент управления станет частью графа сцены, который перерисовывается системой, и поэтому, для него будут выполнены css, layout и rendering.
Первым будут выполнены CSS стили.
При этом, если в данный момент явно не установлен скин методом setSkin, проверяется, имеется ли ссылка на пользовательскую таблицу CSS стилей методом getUserAgentStylesheet, и если да, тогда она устанавливается в CSS движок для стилизации элемента управления.
В таблице CSS стилей ищется свойство -fx-skin для загрузки экземпляра скина.
Далее, элемент управления загружает CSS стили родительских классов.
Это также может привести к загрузке экземпляра скина путем чтения свойства -fx-skin из таблицы CSS стилей.
Если же при этом скин по-прежнему равен нулю, элемент управления вызывает метод createDefaultSkin создания скина по умолчанию.
И этот возвращенный методом экземпляр Skin будет использоваться как скин для элемента управления.
Если же метод createDefaultSkin возвращает нуль, тогда визуальное представление элемента управления будет полностью определяться CSS стилями.
Теперь рассмотрим использование Skin на примере создания пользовательского элемента управления.
Custom Control
Общая схема создания пользовательского JavaFX элемента управления, использующего пользовательский скин – это создание класса, расширяющего класс Control.
В конструкторе этого класса устанавливается пользовательский скин либо с помощью CSS свойства -fx-skin, либо методом setSkin, либо в этом классе переопределяется метод createDefaultSkin.
Пользовательский скин расширяет класс SkinBase и в пользовательском скине используется объект BehaviorBase, отвечающий за реализацию взаимодействия с пользователем.
В конструкторе скина с помощью метода getChildren.addAll можно добавить дочерние узлы в скин.
В переопределенном методе layoutChildren эти дочерние узлы можно скомпоновать.
Также можно переопределить методы, вычисляющие предпочтительные размеры скина.
Вместо класса Control можно расширить существующий элемент управления, расширяя его класс скина.
В этом примере мы расширяем класс Label и в его скине добавляем какие-то новые свойства визуализации.
JavaFX CSS
Как мы уже поняли, платформа JavaFX тесно интегрирована с каскадными таблицами стилей CSS, обеспечивающими для узлов графа сцены их внешний вид.
Использование CSS-стилей платформой JavaFX основывается на спецификации CSS версии 2.1 с некоторыми дополнениями спецификации CSS 3.0 и расширениями, специфичными для JavaFX-технологии.
По умолчанию внешний вид компонентов платформы JavaFX определяется CSS-стилями файла modena. css библиотеки jfxrt. jar.
Стили сначала применяются к родителям, а затем к их детям.
При этом, к узлу применяются CSS стили только после его добавления в граф сцены.
Стили CSS применяются до того, как граф сцены будет скомпонован и нарисован.
Применять CSS-стили для изменения внешнего вида по умолчанию узлов графа сцены можно двумя способами.
Первый способ – это создание отдельных файлов CSS-стилей с расширением. css и размещение их в каталоге главного класса JavaFX-приложения.
В этом случае загрузить созданные CSS-стили в сцену JavaFX-приложения позволяет метод getStylesheets().addAll класса Scene, где указывается URL-адрес CSS-файла.
Или можно использовать метод setUserAgentStylesheet, где также указывается URL-адрес CSS-файла.
И URL-адрес CSS-файла может быть получен с помощью метода:
this.getClass().getResource("stylesheet.css").toString ()
Файл CSS-стилей содержит набор CSS-правил.
При этом каждое CSS-правило состоит из набора CSS-селекторов и объявлений CSS-свойств, применяемых к указанному набору.
Для платформы JavaFX в качестве селекторов могут применяться:
Имена узлов графа сцены, например,.button или. check-box.
Примеры использования таких селекторов можно посмотреть в CSS файле по умолчанию modena. css библиотеки jfxrt. jar.
В этом случае значения CSS-свойств в фигурных скобках применяются к указанным узлам графа сцены.
С помощью селектора. root определяется CSS-стиль корневого узла графа сцены.
Такой селектор можно связать с конкретным экземпляром JavaFX-компонента с помощью метода getStyleClass().add () класса Node.
В качестве селекторов могут применяться также ID-идентификаторы узлов графа сцены.
В этом случае значения CSS-свойств в фигурных скобках применяются к узлам графа сцены с указанными идентификаторами.
Идентификатор узла устанавливается с помощью метода setId () класса Node.
В качестве селекторов также могут применяться имена вложенных элементов для составных JavaFX-элементов, например,.check-box. text или. check-box. box – значения CSS-свойств будут применены к элементу text или элементу box переключателя check-box.
При этом имя вложенного элемента отделяется от имени родительского элемента пробелом.
И наконец, в качестве селекторов также применяться псевдоклассы, представляющие состояния узла графа сцены, например,.button: focused или hover или armed.
Эти состояния также можно посмотреть в CSS файле по умолчанию modena. css библиотеки jfxrt. jar.
В этом случае значения CSS-свойств в фигурных скобках применяются к узлу графа сцены в указанном состоянии.
CSS-свойства, указываемые в блоке объявлений
Жалоба
Напишите нам, и мы в срочном порядке примем меры.