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

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

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

//  JavaFX-

import javafx.application.*;
import javafx.scene.*;
import javafx.stage.*;
import javafx.scene.layout.*;

public class JavaFXSkel extends Application {
    
    public static void main(String[] args) {
        
        System.out.println(" JavaFX-.");
        //  JavaFX-,   launch()
        launch(args);
        
    }
    
    //   init()
    public void init() {
        System.out.println("   init().");
    }
    
    //   start()
    public void start(Stage myStage) {
        System.out.println("   start().");
        
        //   
        myStage.setTitle("JavaFX Skeleton.");
        //  JavaFX-
        
        //   .    
        //   ,    
        //  
        
        FlowPane rootNode = new FlowPane();
        
        //  
        Scene myScene = new Scene(rootNode, 300, 200);
        
        //    
        myStage.setScene(myScene);
        
        //      
        myStage.show();
        
    }
    
    //   stop()
    public void stop() {
        System.out.println("   stop().");
    }
    
    
}

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

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

 JavaFX-.
   init().
   start().
   stop().

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

   stop().

Разумеется, в реальном 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(), чтобы задать заголовок сцены, как показано ниже.

myStage.setTitle("JavaFX Skeleton.");

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

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

FlowPane rootNode = new FlowPane();

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

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

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

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

Scene myScene = new Scene(rootNode, 300, 200);

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

Scene(Parent _, double , double )

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

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

myStage.setScene(myScene);

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

myStage.setScene(new Scene(rootNode, 300, 200))

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

myStage.show()

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

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *