Нам нужна сцена для отображения изображения снежного фона и текста, показанного в нижнем левом углу рисунка 4-1. В JavaFX, компоненты пользовательского интерфейса, являющиеся элементами сцены, называются узлами, потому что они все экземпляры класса javafx.scene.Node. Узел обычно представляет собой некоторую форму, такую как прямоугольник, круг, изображение или текст.
Каждый тип фигуры имеет свой собственный подкласс Node, с переменными, которые позволяют определить параметры формы. Например, подкласс Rectangle имеет переменные, которые позволяют установить положение ее верхнего левого угла, ширину и высоту. Палитра в NetBeans имеет иконки, которые представляют различные простые формы представляющие графический интерфейс JavaFX.
Узлы, которые составляют сцену, перечислены в его переменной content, которая, в нашем приложении, в настоящее время пуста:
scene: Scene {
content: [ ]
}
Каждый тип фигуры имеет свой собственный подкласс Node, с переменными, которые позволяют определить параметры формы. Например, подкласс Rectangle имеет переменные, которые позволяют установить положение ее верхнего левого угла, ширину и высоту. Палитра в NetBeans имеет иконки, которые представляют различные простые формы представляющие графический интерфейс JavaFX.
Узлы, которые составляют сцену, перечислены в его переменной content, которая, в нашем приложении, в настоящее время пуста:
scene: Scene {
content: [ ]
}
Обозначение [] является инициализатор для переменной последовательности.Как вы видели в главе 2, "Основы JavaFX Script," последовательность похожа на массив в Java, в котором может быть множество значений. В этом случае, инициализатор пустой, так что содержимое переменной в настоящее время не имеет узлов, и сцена не будет иметь видимого содержимого.Нам нужно добавить в сцену узел, который способен отображать изображение, это можно сделать следующим образом:
1. Откройте раздел Basic Shapes на панели палитр.
2. Выберите Image и перетащите его в редактор.
3. Переместите изображение между скобок переменной content.
С небольшими изменениями ваш код будет выглядеть вот так:
Добавленный код показан на строках с 12 по 16. ImageView является узлом, который выводит изображение указанное в переменной image, которая имеет тип Image. Image класса JavaFX представляет собой закодированное изображение, загруженное из источника по переменной url. На данный момент, эта переменная установлена ??в произвольное значение; в действительности нам нужно обратиться к файлу SnowScene.png, который находится в той же папке, что и SnowStorm.fx.Для этого отредактируем строку 14, как показано здесь:
url: "{__DIR__}SnowScene.png"
Значение, которое будет присвоено переменной url будет строку, составляемую из предопределенной переменной __DIR__ и добавления к ней значения "SnowScene.png".
Как вы видели в главе 2, переменная __DIR__ устанавливается, во время выполнения, в значение адреса папки, содержащей класс скрипта, со слешем /. Поскольку изображение, которое нам нужно находится в той же папке что и файл скрипта, значение {__DIR__}SnowScene.png преобразуется в URL, который ссылается на изображение.
Если вы сейчас запустите код, щелкнув правой кнопкой мыши по файлу SnowStorm.fx в Projects view и выберите Run File изображение загрузится и отобразиться, как показано на рисунке 4-4.
Рисунок 4-4 Приложение SnowStorm с загруженным фоновым изображением
Как видите, контейнер имеет правильный размер для изображения, которое отображается. Если контейнеру не задан явный размер, он использует предпочитаемый размер основанный на вложенных сценах.Сцена, в свою очередь, использует свои заданные ширину и высоту, если они установлены. Если они не установлены (как в данном случае, поскольку мы удалили линии, которые инициализируют переменные ширины и высоты), сцена устанавливает предпочтительный размер получая его от пространства требующегося для узлов содержащихся в её переменной content. Здесь есть только один узел, поэтому сцена сообщает контейнеру, что она хочет быть того же размера, как ImageView и контейнер устанавливает свой размер соответствующим образом.
Изначальный размер контейнера верен, но установлен по умолчанию, если приложение запускается на компьютере, то пользователь может менять размер контейнера делая окно больше или меньше. Это имеет эффект оставшихся пробелов по краям изображения, как показано на рисунке 4-5.
Как видите, контейнер имеет правильный размер для изображения, которое отображается. Если контейнеру не задан явный размер, он использует предпочитаемый размер основанный на вложенных сценах.Сцена, в свою очередь, использует свои заданные ширину и высоту, если они установлены. Если они не установлены (как в данном случае, поскольку мы удалили линии, которые инициализируют переменные ширины и высоты), сцена устанавливает предпочтительный размер получая его от пространства требующегося для узлов содержащихся в её переменной content. Здесь есть только один узел, поэтому сцена сообщает контейнеру, что она хочет быть того же размера, как ImageView и контейнер устанавливает свой размер соответствующим образом.
Изначальный размер контейнера верен, но установлен по умолчанию, если приложение запускается на компьютере, то пользователь может менять размер контейнера делая окно больше или меньше. Это имеет эффект оставшихся пробелов по краям изображения, как показано на рисунке 4-5.
Рисунок 4-5 Результат изменения размера окна приложения SnowStorm
Мы действительно не хотим позволять пользователю делать это, и это поведение окна легко отключается. Класс Stage имеет переменную resizable, которая определяет, может ли пользователь изменить размер контейнера. По умолчанию она установлена в true, но если вы измените его значение на false, контейнер будет заблокирован на исходном размере и пользователь не сможет изменить его размер. Чтобы установить значение этой переменной, добавьте строку кода с литералом объекта, выделенную жирным шрифтом:
Stage {
title: "JavaFX Snow Storm"
resizeble: false
scene: Scene {
Мы действительно не хотим позволять пользователю делать это, и это поведение окна легко отключается. Класс Stage имеет переменную resizable, которая определяет, может ли пользователь изменить размер контейнера. По умолчанию она установлена в true, но если вы измените его значение на false, контейнер будет заблокирован на исходном размере и пользователь не сможет изменить его размер. Чтобы установить значение этой переменной, добавьте строку кода с литералом объекта, выделенную жирным шрифтом:
Stage {
title: "JavaFX Snow Storm"
resizeble: false
scene: Scene {


Комментариев нет:
Отправить комментарий