Статьи

JavaFX 2.0 Hello World

Прежде чем говорить о самом примере, я хочу показать вам, как создать приложение JavaFX в NetBeans. (Если вы еще не установили JavaFX и NetBeans, см. Мой предыдущий пост Установка JavaFX 2.0 и NetBeans 7.7.1 ) Нажмите «Новый проект» в меню «Файл», чтобы открыть мастер проектов. Затем выберите «JavaFX-> JavaFX Application» и нажмите «Далее».

В следующем диалоговом окне вы можете указать имя вашего приложения и папку назначения, где оно должно храниться. Если вы правильно установили JavaFX, «JavaFX Platform» уже должна быть указана. В противном случае вы можете добавить платформу самостоятельно, нажав «Управление платформами-> Добавить платформу» и указав пути к вашей установке JavaFX.

Примечание. По умолчанию флажок «Создать класс приложения» установлен. Пожалуйста, снимите флажок, потому что мы создадим наш собственный класс приложения.
Нажмите «Готово», чтобы создать свое первое приложение JavaFX.

Hello World в JavaFX 2.0 — Пример 1

Вероятно, каждый разработчик программного обеспечения знает известный пример «HelloWorld», поскольку он часто используется для демонстрации синтаксиса (неизвестного) языка программирования и для первого представления о том, как этот язык выглядит. Я не хочу нарушать эту традицию, поэтому здесь представлены две разные версии программы HelloWorld на JavaFX 2.0. Сначала я покажу полный код, а затем объясню отдельные части.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
 
/**
 *
 * Created on: 17.03.2012
 * @author Sebastian Damm
 */
public class HelloJavaFX extends Application
{
    @Override
    public void start(Stage stage) throws Exception
    {       
        Button bt = new Button('Print HelloWorld');
        bt.setOnAction(new EventHandler<ActionEvent>()
        {
            @Override
            public void handle(ActionEvent arg0)
            {
                System.out.println('HelloWorld! :)');
            }
        });
         
        StackPane root = new StackPane();
        Scene scene = new Scene(root, 300, 150);
        root.getChildren().add(bt);
 
        stage.setTitle('HelloWorld in JavaFX 2.0');
        stage.setScene(scene);
        stage.show();
    }
 
    public static void main(String[] args)
    {
        Application.launch(args);
    }
}

Первое, на что стоит обратить внимание, — это то, что вы должны выйти из класса Application , чтобы создать работающее приложение JavaFX. Этот класс предоставляет несколько методов жизненного цикла и является отправной точкой для вашего приложения. Это абстрактный класс (что означает, что вы не можете создать его экземпляр) с единственным start абстрактного метода, который вы должны переопределить. Вам предоставляется объект stage в среде выполнения JavaFX, которую вы можете использовать для отображения своего пользовательского интерфейса.


Чтобы запустить ваше приложение, вы должны вызвать launch статического метода, как показано в методе main в этом примере. После запуска приложения оно вызовет метод start . Вот JavaDoc класса Application , который показывает отдельные шаги при запуске приложения JavaFX.
Точкой входа для приложений JavaFX является класс Application. Среда выполнения JavaFX выполняет следующие действия по порядку при каждом запуске приложения. Создает экземпляр указанного класса приложения.

  • Вызывает метод init ()
  • Вызывает метод start (javafx.stage.Stage)
  • Ожидает завершения работы приложения, что происходит либо после закрытия последнего окна, либо когда приложение вызывает Platform.exit ()
  • Вызывает метод stop ()

Давайте начнем с реального исходного кода внутри метода start .
Прежде всего, мы создаем простую Button и указываем действие, которое будет запускаться при нажатии кнопки с помощью метода setOnAction (сравните addActionListener addActionListener ).
Затем мы создаем объект StackPane , который является одной из панелей макетов в JavaFX (одна из следующих публикаций блога будет охватывать все различные панели макетов в JavaFX). Я использую StackPane здесь, потому что он автоматически занимает все доступное пространство, предоставленное окружающим его родителем, и потому что он автоматически центрирует своих дочерних StackPane внутри.

Примечание . Основой приложения JavaFX является Scene graph . Каждый отдельный Node (который включает в себя простые элементы управления, группы и панели макета) является частью иерархического дерева узлов, которое называется Scene graph . Граф Scene graph и, следовательно, все ваше приложение JavaFX всегда имеют один корневой узел!

Как упоминалось выше, метод start имеет параметр объекта Stage , который предоставляется средой выполнения JavaFX. Этот объект Stage является своего рода окном. Вы должны дать ему объект Scene качестве видимого содержимого. Вы можете создать объект Scene , передав корневой узел вашего приложения. Необязательными параметрами являются ширина и высота вашей сцены, а также объект Paint , который включает в себя простые цвета, а также сложные цветовые градиенты.
С помощью root.getChildren().add(bt); Вы добавляете кнопку в свой корневой узел, который является областью стека.
После этого мы устанавливаем заголовок для stage и применяем созданный объект scene . Наконец, с помощью метода show мы указываем stage для показа. (сравните набор SwingVisible

Теперь ваше приложение должно выглядеть так:

И он должен напечатать «HelloWorld» в командной строке, если вы нажмете кнопку. Ничего впечатляющего пока нет, но это ваше первое работающее приложение JavaFX, так что поздравляю! 🙂

Hello World в JavaFX 2.0 — Пример 2

Additionally a slightly changed example, which will show the text in the GUI.
The code:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.effect.DropShadow;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
 
/**
 *
 * Created on: 17.03.2012
 * @author Sebastian Damm
 */
public class HelloJavaFX2 extends Application
{
    @Override
    public void start(Stage stage) throws Exception
    {
        final Group root = new Group();
        Scene scene = new Scene(root, 500, 200, Color.DODGERBLUE);
         
        final Text text = new Text(140, 120, 'Hello JavaFX 2.0!');
        text.setFont(Font.font('Calibri', 35));
        text.setFill(Color.WHITE);
        text.setEffect(new DropShadow());       
         
        Button bt = new Button('Show HelloWorld');    
        bt.setLayoutX(180);
        bt.setLayoutY(50);
        bt.setOnAction(new EventHandler<ActionEvent>()
        {
            @Override
            public void handle(ActionEvent arg0)
            {
                root.getChildren().add(text);
            }
        });
 
        root.getChildren().add(bt);
         
        stage.setTitle('HelloWorld in JavaFX 2.0');
        stage.setScene(scene);
        stage.show();
    }
 
    public static void main(String[] args)
    {
        Application.launch(args);
    }
}

Вместо того чтобы использовать панель макета, мы используем здесь объект Group . Group является подклассом Parent (который является подклассом Node ) и принимает одного или нескольких дочерних элементов. Размер Group не может быть изменен напрямую, и вы можете добавить преобразования или эффекты в Group которые будут влиять на всех дочерних элементов Group . (Обратите внимание, что теперь мы также предоставили Paint для Scene .)
Далее мы создаем Text объект. Поскольку у нас нет панели макета, мы указываем координаты x и y напрямую. Мы указываем пользовательский шрифт, меняем цвет на белый и добавляем DropShadow .
Button также получает координаты, и вместо того, чтобы печатать «HelloWorld» в командной строке, когда мы нажимаем кнопку, мы добавляем созданный объект Text в наш корневой элемент (и, следовательно, в Scene Graph ).
После нажатия кнопки ваше приложение должно выглядеть следующим образом.

Резюме:

  • Объект JavaFX Stage является своего рода окном и ведет себя подобно JDialog или JDialog в Swing.
  • Объект JavaFX Scene является видимым содержимым Stage и имеет один Parent корневой узел.
  • Node — один из самых важных классов в JavaFX. Каждая панель управления или макета является своего рода узлом.
  • Граф Scene Graph — это иерархическое дерево узлов. Он имеет один корневой узел и является основой вашего приложения. Он должен быть передан объекту Scene
  • Чтобы создать и запустить приложение JavaFX, вы должны выполнить следующие шаги:
    • Расширить класс Application
    • Переопределить абстрактный метод start
    • Создайте корневой узел и добавьте в него некоторые элементы.
    • Создайте объект Scene и передайте ему корневой узел
    • Применить Scene к Stage через setScene
    • Скажите Stage чтобы показать с помощью метода show
    • Вызовите Application.launch в вашем main методе

Ссылка: Hello World в JavaFX 2.0 от нашего партнера по JCG Себастьяна Дамма в блоге Just my 2 cents о Java .