FXML injection

FXML injection

Sekarang kita akan tambah fungsi kepada button tersebut menggunakan FXML injection.
Buka HomeController.java dan tambah code seperti berikut:
package hellojavafx.view;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;

public class HomeController implements Initializable {

    @FXML
    private void tulisHelloWorld(ActionEvent event) {
        System.out.println("Hello World!");
    }

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }

}
Tips: Untuk import secara automatik menggunakan Netbeans, tekanCtrl+Shift+I. Pastikan juga anda import dari package javafx.
Gambar import FXML menggunakan shortcut
FXML injection ialah tanda @FXML yang kita letakkan pada methodtulisHelloWorld(). Jika kita tidak letak @FXML, Scene Builder takkan jumpa method tersebut.
Sekarang kita sudah boleh menghubungkan code dengan GUI kita. Double-clickpada Home.fxml untuk membuka kembali Scene Builder. Klik pada button, dan pilih method tulisHelloWorld() di menu sebelah kanan bahagian Code.
Gambar tambah action pada FXML
Setelah selesai, save dan tutup Scene Builder.

Run

Sebelum run, ada sedikit yang perlu kita tukar pada code disebabkan kita ada menambah package view sebelum ini.
Buka HelloJavaFX.java dan tukar path ke file FXML seperti berikut:
package hellojavafx;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class HelloJavaFX extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("view/Home.fxml"));

        Scene scene = new Scene(root);

        stage.setTitle("Hello World!");
        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}
Kita juga boleh menambah title pada program kita menggunakanstage.setTitle() seperti di atas.
Sekarang program sudah siap sedia untuk run, dan hasilnya adalah sama seperti program sebelum ini.

FXML injection (extra)

Selain untuk menambah fungsi kepada sesebuah control, FXML injection juga boleh digunakan untuk meletakkan id pada control. Ini bertujuan untuk membolehkan kita mengawal control melalui code. Contohnya jika kita mahu tulis Hello World! di GUI.
Sekarang tambah control Label ke atas AnchorPane. Padamkan text Labeltersebut. Buka HomeController.java dan tambah code seperti berikut:
package hellojavafx.view;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;

public class HomeController implements Initializable {

    @FXML
    private Label label;

    @FXML
    private void tulisHelloWorld(ActionEvent event) {
        System.out.println("Hello World!");
    }

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }

}
Kita juga akan membuatkan program paparkan Hello World! di Label, bukannya di command line. Jadi, kita tukar method tulisHelloWorld() seperti berikut:
package hellojavafx.view;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;

public class HomeController implements Initializable {

    @FXML
    private Label label;

    @FXML
    private void tulisHelloWorld(ActionEvent event) {
        if (label.getText().isEmpty()) {
            label.setText("Hello World!");
        } else {
            label.setText("");
        }
    }

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }

}
Buka kembali Home.fxml. Klik pada Label, kemudian pilih id di menu sebelah kanan bahagian Code.
Gambar menambah id pada control
Save dan tutup Scene Builder. Sekarang kita sudah boleh paparkan Hello World! terus di GUI.

Komentar

Postingan populer dari blog ini

Javafx Scene Builder

Styling dengan CSS Java FX