Нужно ли знать XML, чтобы уметь работать с JavaFX?

Я решил изучить JavaFX, когда я создал свой первый проект, меня заинтересовал файл с разрешением .fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>

<?import javafx.scene.control.Button?>
<VBox alignment="CENTER" spacing="20.0" xmlns:fx="http://javafx.com/fxml"
      fx:controller="com.example.demo3.HelloController">
    <padding>
        <Insets bottom="20.0" left="20.0" right="20.0" top="20.0"/>
    </padding>

    <Label fx:id="welcomeText"/>
    <Button text="Hello!" onAction="#onHelloButtonClick"/>
</VBox>

Я так понимаю - это код на XML. После этого я задался вопросом - нужно ли знать XML, чтобы уметь работать с JavaFX?


Ответы (2 шт):

Автор решения: denis0001-dev

И нет, и да. В JavaFX есть два способа создать интерфейс:

  1. с помощью файла с расширением .fxml:
// Главный класс (допустим com.example.HelloApplication)
package com.example;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.jetbrains.annotations.NotNull;

import java.io.IOException;

public class HelloApplication extends Application {
    @Override
    public void start(@NotNull Stage stage) throws IOException {
        // загрузить FXML файл
        FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
        Scene scene = new Scene(fxmlLoader.load(), 320, 240);
        stage.setTitle("Hello!");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}
// Контроллер (com.example.HelloController)
package com.example;

import javafx.fxml.FXML;
import javafx.scene.control.Label;

public class HelloController {
    @FXML
    private Label welcomeText;

    @FXML
    protected void onHelloButtonClick() {
        welcomeText.setText("Welcome to JavaFX Application!");
    }
}
<!-- FXML файл (в ресурсах: {имя пакета, в нашем случае com.example}/hello-view.fxml -->
<?xml version="1.0" encoding="UTF-8"?>


<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>
<VBox alignment="CENTER" spacing="20.0" xmlns:fx="http://javafx.com/fxml"
      fx:controller="ru.morozovit.shellide.HelloController">
    <padding>
        <Insets bottom="20.0" left="20.0" right="20.0" top="20.0"/>
    </padding>

    <Label fx:id="welcomeText"/>
    <Button text="Hello!" onAction="#onHelloButtonClick"/>
</VBox>

  1. с помощью Java:
// Главный класс
package com.example;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import org.jetbrains.annotations.NotNull;

public class HelloApplication extends Application {
    @Override
    public void start(@NotNull Stage stage) {
        // Корневой контейнер
        VBox vbox = new VBox();
        // Настройки
        vbox.setAlignment(Pos.CENTER);
        vbox.setSpacing(20.0);
        vbox.setPadding(new Insets(20.0, 20.0, 20.0, 20.0));

        Label welcomeText = new Label();

        Button button = new Button();
        button.setText("Hello!");
        button.setOnAction((_) -> welcomeText.setText("Welcome to JavaFX Application!"));

        // Добавим все элементы в контейнер
        vbox.getChildren().add(welcomeText);
        vbox.getChildren().add(button);

        // Вместо FXMLLoader мы используем корневой контейнер
        Scene scene = new Scene(vbox, 320, 240);
        stage.setTitle("Hello!");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

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

→ Ссылка
Автор решения: Foge

Не обязательно, ведь можно использовать Scene Builder - это отдельная программа, позволяющая собрать fxml практически полностью используя только мышь

→ Ссылка