Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин Страница 31
Графические интерфейсы пользователя Java - Тимур Сергеевич Машнин читать онлайн бесплатно
Также можно сгенерировать MSI установщик вместо EXE установщика.
Для этого нужно скачать и установить инструмент WiX и также добавить его в системную переменную Path.
Для создания автономного приложения В IntelliJ IDEA в свойствах проекта нужно добавить артефакты JavaFX приложения.
И во вкладке JavaFX указать класс приложения, название и другие свойства, а также указать нативный пакет.
После чего в меню Build выбрать Build Artifacts.
В результате в папке проекта out\artifacts будет создана папка bundles с установщиком.
Компоненты графического интерфейса пользователя
Компоненты графического интерфейса пользователя платформы JavaFX представлены такими пакетами JavaFX API как scene.control, scene.chart, scene.image, scene.layout, scene.media, scene.shape, scene. text, scene. web и stage.
Все компоненты GUI-интерфейса являются объектами Node узлов графа сцены и характеризуются идентификатором, CSS-стилем, границами, визуальными эффектами, прозрачностью, трансформациями, обработчиками событий, состоянием, режимом наложения и участием в анимации.
Кнопка Button создается с помощью конструктора, в котором можно указать надпись кнопки и значок.
Надпись кнопки также можно установить методом setText.
Методом setOnAction к кнопке присоединяется слушатель нажатия кнопки.
Значок также можно установить для кнопки методом setGraphic.
Методы setLayout узла определяют координаты перемещения узла для его компоновки.
Метод setPrefSize устанавливает предпочтительные размеры компонента в компоновке.
Метод setStyle устанавливает строковое представление стиля CSS, связанного с этим конкретным узлом.
Платформа JavaFX тесно интегрирована с каскадными таблицами стилей CSS, обеспечивающими для узлов графа сцены их внешний вид.
И об этом мы поговорим позже.
Давайте рассмотрим некоторые другие интересные методы компонентов, унаследованные от родительских классов.
Метод setBlendMode узла определяет режим наложения этого узла на сцену позади него.
В данном случае результирующий фон кнопки получается на основе темных составляющих цветов фона кнопки и фона сцены.
Этот метод работает немного по-другому для узла группы Group.
Если этот узел является группой, тогда все узлы группы будут размещены во временном буфере, используя их собственные режимы наложения, а затем этот временный буфер будет скомпонован в сцену, используя режим наложения группы.
Метод setClip указывает узел, который будет использоваться для определения формы обрезки для данного узла.
Причем, определение узла-маски для узла нивелирует установку его режима наложения.
В данном случае мы накладываем на кнопку маску в виде окружности.
Метод setCursor определяет форму курсора мыши для этого узла и его подузлов.
Метод setEffect определяет визуальные эффекты для узла.
Об эффектах мы поговорим позже.
В данном случае к кнопке применяется эффект тени.
Метод setManaged определяет, будет ли компоновка этого узла управляться его родителем.
При установке свойства managed со значением false не учитываются максимальные, минимальные и предпочтительные размеры кнопки.
Если значение этого свойства false, вам нужно будет самостоятельно определить размер и положение узла.
Сделать это можно методом resize.
Элементы контроля наследуют от класса Region, который определяет такие свойства, как ширина и высота узла, которые устанавливаются родительским узлом во время компоновки.
Если приложение хочет изменить размеры региона при компоновке, оно должно переопределить предпочтительный диапазон размеров, установив свойства минимальных, максимальных и предпочтительных ширины и высоты.
Напрямую изменить ширину и высоту узла можно с помощью метода resize, который заставляет родительский узел во время компоновки установить ширину и высоту региона.
Компоновка графа сцены автоматически запускается системой, как только приложение создает и отображает сцену.
Граф сцены обнаруживает динамические изменения узлов, которые влияют на макет (например, изменение размера или содержимого), и вызывает метод requestLayout, который отмечает эту ветку графа как требующую перекомпоновки.
После чего происходит перекомпоновка, включая все дочерние узлы.
Граф сцены поддерживает как изменяемые, так и не изменяемые по размеру узлы.
Метод isResizable узла возвращает, является ли данный узел изменяемым по размеру или нет.
Элементы управления и компоновки изменяются по размеру, но формы, текстовые объекты и группы не изменяются по размеру
Изменяемый по размеру узел поддерживает диапазон допустимых размеров – это минимальные, предпочтительные и максимальные размеры, позволяя своему родительскому узлу изменять его размер в пределах этого диапазона во время компоновки.
Поэтому все узлы, которые расширяют Region или Control и устанавливаются как корневой узел, автоматически будут подгоняться под размеры сцены.
Все узлы, которые расширяют группу, не будут подгоняться под размеры сцены.
Если вы не хотите, чтобы приложение изменялось в соответствии с размером сцены, добавьте группу в качестве корневого узла.
Что касается минимальных, предпочтительных и максимальных размеров узла, какие размеры берутся за основу, зависит от родительского узла.
Например, группа использует предпочтительный размер дочернего узла, а панель компоновки StackPane использует максимальные размеры дочернего узла, которые для некоторых узлов по умолчанию равны предпочтительным размерам.
Та же панель компоновки StackPane не обращает внимание на минимальные размеры, а панель компоновки HBox соблюдает их.
Если явно не устанавливать минимальные, предпочтительные и максимальные размеры, тогда узел сам вычисляет эти размеры на основе своего содержимого, и эти размеры его родитель будет использовать для изменения размера узла во время компоновки.
Теперь, узел имеет свойство layoutBounds или границы – это прямоугольные границы, которые используются для вычислений компоновки для этого узла.
Компоновочные границы layoutBounds определяются в локальной системе координат узла и могут отличаться от визуальных границ узла и вычисляются по-разному в зависимости от типа узла.
Если тип узла имеет изменяемые размеры, тогда границы layoutBounds всегда совпадают с фактической шириной и высотой узла.
Если узла имеет не изменяемые размеры, тогда границы layoutBounds вычисляются на основе геометрических свойств узла.
Компоновочные границы layoutBounds соответствуют геометрическим границам компонента без учета эффектов, масок, трансформаций, но с учетом установленных размеров.
Далее узел имеет свойство boundsInLocal – это границы узла, которые также определяются в локальной системе координат узла, однако включают в себя контур, эффекты и маски, но не учитывают трансформации.
И наконец, узел имеет свойство boundsInParent – это границы узла относительно родительского узла, которые определяются в системе координат родительского узла и учитывают эффекты, маски и трансформации.
Метод setFocusTraversable со значением true определяет, что фокус можно перемещать с помощью стрелок клавиатуры и клавиши Tab.
Надо заметить, что при наведении фокуса на кнопку свойство focused принимает значение true.
При нажатии кнопки с помощью клавиши Enter клавиатуры свойство hover остается со значением false, а при нажатии кнопки мышкой свойство hover принимает значение true.
При нажатии кнопки с помощью мышки значение свойства pressed остается false, а значение свойства armed становится true, так как кнопка активируется не нажатием мышки, а нажатием и освобождением мышки.
При установке свойства mouseTransparent со значением true кнопка активируется только с помощью клавиатуры.
Метод setOpacity устанавливает прозрачность узла.
Присоединение эффекта к узлу может нивелировать установку прозрачности узла. В данном случае это происходит при установке тени для кнопки.
Методы setRotate, setLayout, setScale, setTranslate определяют трансформации узла.
И о трансформациях мы тоже поговорим позже.
Метод setTooltip добавляет всплывающую подсказку к элементу контроля.
Метод setAlignment указывает, как текст и графика в кнопке должны быть выровнены, когда есть пустое
Жалоба
Напишите нам, и мы в срочном порядке примем меры.