Скелет JavaFX приложения

Скелет JavaFX приложенияВсе JаvаFХ-приложения создаются по одному и тому же образцу — типично­му скелету. Поэтому, прежде чем перейти к рассмотрению каких-нибудь других средств JavaFX, стоит продемонстрировать скелет JаvаFХ-приложения. Помимо общей формы такого приложения, скелет демонстрирует порядок его запуска и вызова методов его жизненного цикла.

Когда вызывается каждый метод жизнен­ного цикла, на консоль выводится извещающее об этом сообщение. Ниже приве­ден весь скелет JаvаFХ-приложения.

Несмотря на всю краткость такого скелета JаvаFХ-приложения, его можно скомпилировать и запустить на выполнение. В итоге на экране появляется окно.

http://www.amtek.com.ua/Кроме того, при выполнении данного скелета JаvаFХ-приложения на консоль выводятся следующие сообщения:

При закрытии окна данного скелета JаvаFХ-приложения на консоль выводится следующее сообщение:

Разумеется, в реальном JаvаFХ-приложении методы его жизненного цикла обычно не направляют никаких сообщений в стандартный поток вывода System.out. Но в данном скелете это делается ради того, чтобы показать, когда именно вызывается каждый метод жизненного цикла JаvаFХ-приложения.

Более того, ме­тоды init() и stop() придется, как пояснялось ранее, переопределить только в том случае, если приложение должно выполнить специальные действия для за­пуска и закрытия. В противном случае можно воспользоваться реализациями этих методов, предоставляемыми по умолчанию в классе Application.

Рассмотрим данный скелет JаvаFХ-приложения более подробно. Сначала в нем импортируются четыре пакета. Первым из них является пакет javafx.application, содержащий класс Application. Вторым пакет javafx.scene, содержащий класс Scene. Третьим пакет javafx.stage, содержащий класс Stage. Четвертым — пакет javafx.scene.layout, предоставляющий ряд панелей компоновки. В данном случае используется панель поточной компоновки типа FlowPane.

Далее создается класс приложения JavaFXSkel, расширяющий класс Application. Как пояснялось ранее, от класса Application происходят классы всех JаvаFХ-приложений. Класс JavaFXSkel содержит два метода. Первый из них называется main() и служит для запуска приложения через метод launch().

Обратите внимание на то, что параметр args передается не только методу main(), но и методу launch(). И хотя это типичный подход, методу launch() можно передать и другие параметры или вообще не передавать их. И, как поясня­лось ранее, метод launch() требуется только для автономных приложений.

Когда приложение начинает выполняться, первым из исполняющей системы JavaFX вызывается метод init(). Ради большей наглядности примера этот метод просто направляет сообщение в стандартный поток вывода System.out , но, как пра­вило, он служит для инициализации некоторых свойств приложения.

Разумеется, если инициализация не требуется, то и переопределять метод init() не нужно, поскольку по умолчанию предоставляется его пустая реализация. Следует особо под­черкнуть, что с помощью метода init() нельзя создать подмостки или сцену. Эти элементы ГПИ следует создавать и отображать с помощью метода start().

По завершении метода init() начинает выполняться метод start(). Именно в нем и создается первоначальная сцена и устанавливаются главные подмостки.

Проанализируем этот метод построчно. Прежде всего следует заметить, что у ме­тода start() имеется параметр типа Stage. Когда метод start() вызывается, этот параметр получает ссылку на главные подмостки приложения , где и устанав­ливается сцена для приложения.

После вывода на консоль сообщения о том, что метод start() начал выполнять­ся, вызывается метод setTitle(), чтобы задать заголовок сцены, как показано ниже.

Эта операция характерна для автономных приложений, хотя и не является обя­зательной. Указанный заголовок становится заглавием главного окна приложения.

Далее создается корневой узел сцены. Это единственный узел графа сцены,у которого отсутствует родитель. В данном случае в качестве корневого узла слу­жит панель поточной компоновки типа FlowPane, как показано ниже. Хотя в кор­невом узле могут быть использованы и другие классы.

Как упоминалось ранее, класс FlowPane предоставляет диспетчер поточной компоновки, где элементы располагаются построчно с автоматическим переходомна новую строку, если требуется.

Следовательно, этот класс действует аналогично классу FlowLayout из библиотек AWT и Swing. В данном случае применяется по­точная компоновка по горизонтали, хотя можно указать и поточную компоновку по вертикали.

Имеется возможность указать и другие свойства компоновки, в том числе промежутки между элементами по горизонтали и по вертикали, а также выравнивание, хотя в данном скелетном приложении этого не требуется.

В следующей строке кода корневой узел используется для построения сцены в виде объекта типа Scene:

В классе Scene предоставляется несколько форм конструктора. В той форме конструктора, которая применяется здесь, создается сцена с указанным корневым умом и заданной шириной и высотой. Ниже приведена данная форма варианта конструктора класса Scene.

Как видите, параметр корневой_узел относится к типу Parent. Это класс, про­изводный от класса Node и инкапсулирующий узлы, у которых могут быть потом­ки. А параметры ширина и высота относятся к типу double. Это дает возможность передавать данному конструктору дробные числовые значения ширины и высоты сцены. В данном скелете JаvаFХ-приложения указан корневой узел rootNode и за­дана ширина 300 и высота 200 сцены.

В приведенной ниже строке кода устанавливается сцена myScene на подмостках myStage. Для этого вызывается метод setScene() определяемый в классе Stage и устанавливающий сцену, указываемую в качестве его аргумента.

В тех случаях, когда сцена больше не используется, обе предыдущие операции можно объединить в одну, как показано ниже. Благодаря своей компактности эта форма используется в большинстве представленных далее примеров.

И в последней , приведенной ниже строке кода из метода start() отобража­ются подмостки и сцена. По существу, метод show() отображает окно, созданное на подмостках и сцене.

Когда приложение закрывается, его окно удаляется с экрана, а из исполняющей системы JаvаFХ вызывается метод stop(). В данном случае метод stop() просто выводит на консоль сообщение о том, что он начал выполняться.

Но, как правило,этот метод ничего не выводит на экран. Более того, если в приложении не требуется выполнять никаких закрывающих действий, то и переопределять метод stop() не нужно, поскольку по умолчанию предоставляется его пустая реализация.