JavaFX - aplikacja

W tym rozdziale omówimy szczegółowo strukturę aplikacji JavaFX, a także nauczymy się tworzyć aplikacje JavaFX na przykładzie.

Struktura aplikacji JavaFX

Ogólnie rzecz biorąc, aplikacja JavaFX będzie miała trzy główne komponenty, a mianowicie Stage, Scene i Nodes jak pokazano na poniższym schemacie.

Etap

Scena (okno) zawiera wszystkie obiekty aplikacji JavaFX. Jest reprezentowany przezStage klasa pakietu javafx.stage. Etap podstawowy jest tworzony przez samą platformę. Utworzony obiekt etapu jest przekazywany jako argument dostart() metoda Application klasa (wyjaśnione w następnej sekcji).

Etap ma dwa parametry określające jego położenie, a mianowicie Width i Height. Jest podzielony na obszar zawartości i dekoracje (pasek tytułu i obramowanie).

Dostępnych jest pięć typów etapów -

  • Decorated
  • Undecorated
  • Transparent
  • Unified
  • Utility

Musisz zadzwonić do show() , aby wyświetlić zawartość etapu.

Scena

Scena reprezentuje fizyczną zawartość aplikacji JavaFX. Zawiera całą zawartość wykresu sceny. KlasaScene pakietu javafx.scenereprezentuje obiekt sceny. Na przykład obiekt sceny jest dodawany tylko do jednego etapu.

Możesz utworzyć scenę, tworząc instancję klasy sceny. Możesz wybrać rozmiar sceny, przekazując jej wymiary (wysokość i szerokość) wraz z rozszerzeniemroot node do swojego konstruktora.

Wykres sceny i węzły

ZA scene graphjest drzewiastą strukturą danych (hierarchiczną) reprezentującą zawartość sceny. W przeciwieństwie do tego anode jest wizualnym / graficznym obiektem wykresu sceny.

Węzeł może zawierać -

  • Obiekty geometryczne (graficzne) (2D i 3D), takie jak - Okrąg, Prostokąt, Wielokąt itp.

  • Elementy sterujące interfejsu użytkownika, takie jak - przycisk, pole wyboru, pole wyboru, obszar tekstowy itp.

  • Kontenery (panele układu), takie jak okienko graniczne, okienko siatki, okienko przepływu itp.

  • Elementy multimedialne, takie jak obiekty audio, wideo i obrazy.

Plik Node Klasa pakietu javafx.scene reprezentuje węzeł w JavaFX, ta klasa jest superklasą wszystkich węzłów.

Jak wspomniano wcześniej, węzeł ma trzy typy -

  • Root Node - Pierwszy wykres sceny jest znany jako węzeł główny.

  • Branch Node/Parent Node- Węzeł z węzłami podrzędnymi nazywany jest węzłami gałęzi / nadrzędnymi. Klasa abstrakcyjna o nazwieParent pakietu javafx.scene jest klasą bazową wszystkich węzłów nadrzędnych, a te węzły nadrzędne będą następujących typów -

    • Group- Węzeł grupy to zbiorczy węzeł zawierający listę węzłów potomnych. Za każdym razem, gdy węzeł grupy jest renderowany, wszystkie jego węzły potomne są renderowane w kolejności. Każda transformacja, stan efektu zastosowany do grupy zostanie zastosowany do wszystkich węzłów potomnych.

    • Region - Jest to klasa bazowa wszystkich kontrolek UI opartych na JavaFX Node, takich jak Chart, Pane i Control.

    • WebView - Ten węzeł zarządza silnikiem internetowym i wyświetla jego zawartość.

  • Leaf Node- Węzeł bez węzłów potomnych jest nazywany węzłem liścia. Na przykład Rectangle, Ellipse, Box, ImageView, MediaView to przykłady węzłów liści.

Konieczne jest przekazanie węzła głównego do wykresu sceny. Jeśli Grupa zostanie przekazana jako root, wszystkie węzły zostaną przycięte do sceny, a każda zmiana rozmiaru sceny nie wpłynie na układ sceny.

Tworzenie aplikacji JavaFX

Aby utworzyć aplikację JavaFX, musisz utworzyć instancję klasy Application i zaimplementować jej metodę abstrakcyjną start(). W tej metodzie napiszemy kod dla aplikacji JavaFX.

Klasa aplikacji

Plik Application klasa pakietu javafx.applicationto punkt wejścia aplikacji w JavaFX. Aby utworzyć aplikację JavaFX, musisz odziedziczyć tę klasę i zaimplementować jej metodę abstrakcyjnąstart(). W tej metodzie musisz napisać cały kod dla grafiki JavaFX

w main musisz uruchomić aplikację przy użyciu launch()metoda. Ta metoda wewnętrznie wywołujestart() metoda klasy Application, jak pokazano w poniższym programie.

public class JavafxSample extends Application {  
   @Override     
   public void start(Stage primaryStage) throws Exception { 
      /* 
      Code for JavaFX application. 
      (Stage, scene, scene graph) 
      */       
   }         
   public static void main(String args[]){           
      launch(args);      
   } 
}

W ramach start() metoda, aby stworzyć typową aplikację JavaFX, należy postępować zgodnie z poniższymi krokami -

  • Przygotuj wykres sceny z wymaganymi węzłami.

  • Przygotuj scenę z wymaganymi wymiarami i dodaj do niej wykres sceny (węzeł główny wykresu sceny).

  • Przygotuj scenę i dodaj scenę do sceny i wyświetl zawartość sceny.

Przygotowanie wykresu sceny

Zgodnie z Twoją aplikacją musisz przygotować wykres sceny z wymaganymi węzłami. Ponieważ węzeł główny jest pierwszym węzłem, musisz utworzyć węzeł główny. Jako węzeł główny możesz wybrać spośródGroup, Region or WebView.

Group - Węzeł grupy jest reprezentowany przez nazwaną klasę Group który należy do pakietu javafx.scene, możesz utworzyć węzeł grupy, tworząc wystąpienie tej klasy, jak pokazano poniżej.

Group root = new Group();

Plik getChildren() metoda Group class daje obiekt klasy ObservableListklasa przechowująca węzły. Możemy pobrać ten obiekt i dodać do niego węzły, jak pokazano poniżej.

//Retrieving the observable list object 
ObservableList list = root.getChildren(); 
       
//Setting the text object as a node  
list.add(NodeObject);

Możemy również dodawać obiekty Node do grupy, po prostu przekazując je do pliku Group class i do jej konstruktora w momencie tworzenia instancji, jak pokazano poniżej.

Group root = new Group(NodeObject);

Region - Jest to klasa podstawowa wszystkich kontrolek interfejsu użytkownika opartych na węzłach JavaFX, takich jak -

  • Chart - Ta klasa jest klasą bazową wszystkich wykresów i należy do pakietu javafx.scene.chart.

    Ta klasa ma dwie podklasy, którymi są - PieChart i XYChart. Te dwie z kolei mają podklasy, takie jakAreaChart, BarChart, BubbleChartitp. używane do rysowania różnych typów wykresów XY-Plane w JavaFX.

    Możesz używać tych klas do osadzania wykresów w swojej aplikacji.

  • Pane - Panel jest klasą bazową wszystkich paneli układu, takich jak AnchorPane, BorderPane, DialogPaneitd. Ta klasa należy do pakietu o nazwie - javafx.scene.layout.

    Możesz używać tych klas do wstawiania predefiniowanych układów w swojej aplikacji.

  • Control - Jest to klasa bazowa formantów interfejsu użytkownika, takich jak Accordion, ButtonBar, ChoiceBox, ComboBoxBase, HTMLEditor, etc. This class belongs to the package javafx.scene.control.

    Możesz użyć tych klas, aby wstawić różne elementy interfejsu użytkownika do aplikacji.

W grupie możesz utworzyć instancję dowolnej z wyżej wymienionych klas i używać ich jako węzłów głównych, jak pokazano w poniższym programie.

//Creating a Stack Pane 
StackPane pane = new StackPane();       
       
//Adding text area to the pane  
ObservableList list = pane.getChildren(); 
list.add(NodeObject);

WebView - Ten węzeł zarządza silnikiem internetowym i wyświetla jego zawartość.

Poniżej znajduje się diagram przedstawiający hierarchię klas węzłów w JavaFX.

Przygotowanie sceny

Scena JavaFX jest reprezentowana przez Scene klasa pakietu javafx.scene. Możesz utworzyć scenę, tworząc wystąpienie tej klasy, jak pokazano w poniższym bloku cod.

Podczas tworzenia instancji konieczne jest przekazanie obiektu głównego do konstruktora klasy sceny.

Scene scene = new Scene(root);

Możesz również przekazać dwa parametry podwójnego typu reprezentujące wysokość i szerokość sceny, jak pokazano poniżej.

Scene scene = new Scene(root, 600, 300);

Przygotowanie sceny

Jest to kontener każdej aplikacji JavaFX i udostępnia okno aplikacji. Jest reprezentowany przezStage klasa pakietu javafx.stage. Obiekt tej klasy jest przekazywany jako parametr klasystart() metoda Application klasa.

Za pomocą tego obiektu możesz wykonywać różne operacje na scenie. Przede wszystkim możesz wykonać następujące czynności -

  • Za pomocą tej metody ustaw tytuł sceny setTitle().

  • Dołącz obiekt sceny do sceny za pomocą setScene() metoda.

  • Wyświetl zawartość sceny za pomocą show() metoda, jak pokazano poniżej.

//Setting the title to Stage. 
primaryStage.setTitle("Sample application"); 
       
//Setting the scene to Stage 
primaryStage.setScene(scene); 
       
//Displaying the stage 
primaryStage.show();

Cykl życia aplikacji JavaFX

Klasa aplikacji JavaFX ma trzy metody cyklu życia, którymi są:

  • start() - Metoda punktu wejścia, w której ma zostać zapisany kod graficzny JavaFX.

  • stop() - Pusta metoda, którą można nadpisać, tutaj możesz napisać logikę zatrzymującą aplikację.

  • init() - Pusta metoda, którą można nadpisać, ale w tej metodzie nie można utworzyć sceny ani sceny.

Oprócz tego zapewnia statyczną metodę o nazwie launch() aby uruchomić aplikację JavaFX.

Ponieważ launch()metoda jest statyczna, musisz ją wywołać z kontekstu statycznego (ogólnie głównego). Za każdym razem, gdy uruchamiana jest aplikacja JavaFX, wykonywane będą następujące czynności (w tej samej kolejności).

  • Tworzona jest instancja klasy aplikacji.

  • Init() wywoływana jest metoda.

  • Plik start() wywoływana jest metoda.

  • Program uruchamiający czeka na zakończenie aplikacji i wywołuje plik stop() metoda.

Zakończenie aplikacji JavaFX

Zamknięcie ostatniego okna aplikacji powoduje niejawne zakończenie działania aplikacji JavaFX. Możesz wyłączyć to zachowanie, przekazując wartość logiczną „False” do metody statycznej setImplicitExit() (należy wywołać z kontekstu statycznego).

Aplikację JavaFX można zamknąć jawnie przy użyciu metod Platform.exit() lub System.exit(int).

Przykład 1 - Tworzenie pustego okna

W tej sekcji przedstawiono sposób tworzenia przykładowej aplikacji JavaFX, która wyświetla puste okno. Oto kroki -

Krok 1: Tworzenie klasy

Utwórz klasę Java i dziedzicz Application klasa pakietu javafx.application i zaimplementuj metodę start () tej klasy w następujący sposób.

public class JavafxSample extends Application {  
   @Override     
   public void start(Stage primaryStage) throws Exception {      
   }    
}

Krok 2: Tworzenie obiektu grupowego

w start() tworzy obiekt grupy, tworząc wystąpienie klasy o nazwie Group, która należy do pakietu javafx.scenew następujący sposób.

Group root = new Group();

Krok 3: Tworzenie obiektu sceny

Utwórz scenę, tworząc wystąpienie klasy o nazwie Scene który należy do pakietu javafx.scene. Do tej klasy przekaż obiekt Group(root)utworzony w poprzednim kroku.

Oprócz obiektu głównego można również przekazać dwa podwójne parametry reprezentujące wysokość i szerokość ekranu wraz z obiektem klasy Group w następujący sposób.

Scene scene = new Scene(root,600, 300);

Krok 4: Ustawianie tytułu sceny

Możesz ustawić tytuł sceny za pomocą setTitle() metoda Stageklasa. PlikprimaryStage jest obiektem Stage, który jest przekazywany do metody start klasy sceny jako parametr.

Używając primaryStage ustaw tytuł sceny jako Sample Application jak pokazano niżej.

primaryStage.setTitle("Sample Application");

Krok 5: Dodawanie sceny do sceny

Za pomocą tej metody można dodać obiekt Scene do sceny setScene() klasy o nazwie Stage. Dodaj obiekt Scena przygotowany w poprzednich krokach przy użyciu tej metody, jak pokazano poniżej.

primaryStage.setScene(scene);

Krok 6: Wyświetlanie zawartości stołu montażowego

Wyświetl zawartość sceny za pomocą metody o nazwie show() z Stage klasę w następujący sposób.

primaryStage.show();

Krok 7: Uruchomienie aplikacji

Uruchom aplikację JavaFX, wywołując metodę statyczną launch() z Application klasa z metody głównej w następujący sposób.

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

Przykład

Poniższy program generuje puste okno JavaFX. Zapisz ten kod w pliku o nazwieJavafxSample.java

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage;  

public class JavafxSample extends Application { 
   @Override     
   public void start(Stage primaryStage) throws Exception {            
      //creating a Group object 
      Group group = new Group(); 
       
      //Creating a Scene by passing the group object, height and width   
      Scene scene = new Scene(group ,600, 300); 
      
      //setting color to the scene 
      scene.setFill(Color.BROWN);  
      
      //Setting the title to Stage. 
      primaryStage.setTitle("Sample Application"); 
   
      //Adding the scene to Stage 
      primaryStage.setScene(scene); 
       
      //Displaying the contents of the stage 
      primaryStage.show(); 
   }    
   public static void main(String args[]){          
      launch(args);     
   }         
}

Skompiluj i uruchom zapisany plik java z wiersza poleceń, używając następujących poleceń.

javac JavafxSample.java 
java JavafxSample

Podczas wykonywania powyższy program generuje okno JavaFX, jak pokazano poniżej.

Przykład 2 - Rysowanie prostej linii

W poprzednim przykładzie widzieliśmy, jak utworzyć pusty etap, teraz w tym przykładzie spróbujmy narysować linię prostą za pomocą biblioteki JavaFX.

Oto kroki -

Krok 1: Tworzenie klasy

Utwórz klasę Java i dziedzicz Application klasa pakietu javafx.application i zaimplementuj start() metoda tej klasy w następujący sposób.

public class DrawingLine extends Application {
   @Override     
   public void start(Stage primaryStage) throws Exception {     
   }    
}

Krok 2: Tworzenie linii

Możesz utworzyć wiersz w JavaFX, tworząc wystąpienie klasy o nazwie Line który należy do pakietu javafx.scene.shape, utwórz wystąpienie tej klasy w następujący sposób.

//Creating a line object         
Line line = new Line();

Krok 3: Ustawianie właściwości dla linii

Określ współrzędne, aby narysować linię na płaszczyźnie XY, ustawiając właściwości startX, startY, endX i endY, używając odpowiednich metod ustawiających, jak pokazano w poniższym bloku kodu.

line.setStartX(100.0); 
line.setStartY(150.0); 
line.setEndX(500.0); 
line.setEndY(150.0);

Krok 4: Tworzenie obiektu grupowego

W metodzie start () utwórz obiekt grupy, tworząc instancję klasy o nazwie Group, która należy do pakietu javafx.scene.

Przekaż utworzony w poprzednim kroku obiekt Line (node) jako parametr do konstruktora klasy Group, aby dodać go do grupy w następujący sposób -

Group root = new Group(line);

Krok 5: Tworzenie obiektu sceny

Utwórz scenę, tworząc wystąpienie klasy o nazwie Scene który należy do pakietu javafx.scene. Do tej klasy przekaż obiekt Group(root) który został utworzony w poprzednim kroku.

Oprócz obiektu głównego można również przekazać dwa podwójne parametry reprezentujące wysokość i szerokość ekranu wraz z obiektem klasy Group w następujący sposób.

Scene scene = new Scene(group ,600, 300);

Krok 6: Ustawianie tytułu sceny

Możesz ustawić tytuł sceny za pomocą setTitle() metoda Stageklasa. PlikprimaryStage jest obiektem Stage, który jest przekazywany do metody start klasy sceny jako parametr.

Używając primaryStage ustaw tytuł sceny jako Sample Application następująco.

primaryStage.setTitle("Sample Application");

Krok 7: Dodawanie sceny do sceny

Za pomocą tej metody można dodać obiekt Scene do sceny setScene() klasy o nazwie Stage. Dodaj obiekt Scene przygotowany w poprzednich krokach, używając tej metody w następujący sposób.

primaryStage.setScene(scene);

Krok 8: Wyświetlanie zawartości stołu montażowego

Wyświetl zawartość sceny za pomocą metody o nazwie show() z Stage klasę w następujący sposób.

primaryStage.show();

Krok 9: Uruchomienie aplikacji

Uruchom aplikację JavaFX, wywołując metodę statyczną launch() z Application klasa z metody głównej w następujący sposób.

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

Przykład

Poniższy program pokazuje, jak wygenerować linię prostą za pomocą JavaFX. Zapisz ten kod w pliku o nazwieJavafxSample.java.

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.shape.Line; 
import javafx.stage.Stage;  

public class DrawingLine extends Application{ 
   @Override 
   public void start(Stage stage) { 
      //Creating a line object 
      Line line = new Line(); 
         
      //Setting the properties to a line 
      line.setStartX(100.0); 
      line.setStartY(150.0); 
      line.setEndX(500.0); 
      line.setEndY(150.0); 
         
      //Creating a Group 
      Group root = new Group(line); 
         
      //Creating a Scene 
      Scene scene = new Scene(root, 600, 300); 
         
      //Setting title to the scene 
      stage.setTitle("Sample application"); 
         
      //Adding the scene to the stage 
      stage.setScene(scene); 
         
      //Displaying the contents of a scene 
      stage.show(); 
   }      
   public static void main(String args[]){ 
      launch(args); 
   } 
}

Skompiluj i uruchom zapisany plik java z wiersza poleceń, używając następujących poleceń.

javac DrawingLine.java 
java DrawingLine

Podczas wykonywania powyższy program generuje okno JavaFX wyświetlające linię prostą, jak pokazano poniżej.

Przykład 3 - wyświetlanie tekstu

Możemy również osadzić tekst w scenie JavaFX. Ten przykład pokazuje, jak osadzić tekst w JavaFX.

Oto kroki -

Krok 1: Tworzenie klasy

Utwórz klasę Java i dziedzicz Application klasa pakietu javafx.application i zaimplementuj start() metoda tej klasy w następujący sposób.

public class DrawingLine extends Application {  
   @Override     
   public void start(Stage primaryStage) throws Exception {     
   } 
}

Krok 2: Osadzanie tekstu

Możesz osadzić tekst w scenie JavaFX, tworząc wystąpienie klasy o nazwie Text który należy do pakietu javafx.scene.shape, utwórz wystąpienie tej klasy.

Możesz utworzyć wystąpienie tej klasy, przekazując tekst do osadzenia w formacie String. Możesz też utworzyć obiekt tekstowy przy użyciu domyślnego konstruktora, jak pokazano poniżej.

//Creating a Text object 
Text text = new Text();

Krok 3: Ustawianie czcionki

Możesz ustawić czcionkę tekstu za pomocą setFont() metoda Textklasa. Ta metoda akceptuje obiekt czcionki jako parametry. Ustaw czcionkę podanego tekstu na 45, jak pokazano poniżej.

//Setting font to the text 
text.setFont(new Font(45));

Krok 4: Ustawianie pozycji tekstu

Możesz ustawić położenie tekstu na płaszczyźnie XY, ustawiając współrzędne X, Y za pomocą odpowiednich metod ustawiających setX() i setY() następująco.

//setting the position of the text 
text.setX(50); 
text.setY(150);

Krok 5: Ustawianie tekstu do dodania

Tekst do dodania można ustawić za pomocą metody setText () klasy Text. Ta metoda akceptuje parametr ciągu reprezentujący tekst do dodania.

text.setText("Welcome to Tutorialspoint");

Krok 6: Tworzenie obiektu grupowego

w start() metoda, utwórz obiekt grupy, tworząc wystąpienie klasy o nazwie Group, która należy do pakietu javafx.scene.

Przekaż utworzony w poprzednim kroku obiekt Text (node) jako parametr do konstruktora klasy Group, aby dodać go do grupy w następujący sposób -

Group root = new Group(text)

Krok 7: Tworzenie obiektu sceny

Utwórz scenę, tworząc wystąpienie klasy o nazwie Scene który należy do pakietu javafx.scene. Do tej klasy przekaż obiekt Group(root)utworzony w poprzednim kroku.

Oprócz obiektu głównego można również przekazać dwa podwójne parametry reprezentujące wysokość i szerokość ekranu wraz z obiektem klasy Group w następujący sposób.

Scene scene = new Scene(group ,600, 300);

Krok 8: Ustawianie tytułu sceny

Możesz ustawić tytuł sceny za pomocą setTitle() metoda Stageklasa. PlikprimaryStage jest obiektem Stage, który jest przekazywany do metody start klasy sceny jako parametr.

Używając primaryStage ustaw tytuł sceny jako Sample Application jak pokazano niżej.

primaryStage.setTitle("Sample Application");

Krok 9: Dodawanie sceny do sceny

Za pomocą tej metody można dodać obiekt Scene do sceny setScene() klasy o nazwie Stage. Dodaj obiekt Scene przygotowany w poprzednich krokach, używając tej metody w następujący sposób.

primaryStage.setScene(scene);

Krok 10: Wyświetlanie zawartości sceny

Wyświetl zawartość sceny za pomocą metody o nazwie show() z Stage klasę w następujący sposób.

primaryStage.show();

Krok 11: Uruchomienie aplikacji

Uruchom aplikację JavaFX, wywołując metodę statyczną launch() z Application klasa z metody głównej w następujący sposób.

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

Przykład

Poniżej znajduje się program do wyświetlania tekstu za pomocą JavaFX. Zapisz ten kod w pliku o nazwieDisplayingText.java.

import javafx.application.Application; 
import javafx.collections.ObservableList; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.scene.text.Font; 
import javafx.scene.text.Text; 
         
public class DisplayingText extends Application { 
   @Override 
   public void start(Stage stage) {       
      //Creating a Text object 
      Text text = new Text(); 
       
      //Setting font to the text 
      text.setFont(new Font(45)); 
       
      //setting the position of the text 
      text.setX(50); 
      text.setY(150);          
      
      //Setting the text to be added. 
      text.setText("Welcome to Tutorialspoint"); 
         
      //Creating a Group object  
      Group root = new Group(); 
       
      //Retrieving the observable list object 
      ObservableList list = root.getChildren(); 
       
      //Setting the text object as a node to the group object 
      list.add(text);       
               
      //Creating a scene object 
      Scene scene = new Scene(root, 600, 300); 
       
      //Setting title to the Stage 
      stage.setTitle("Sample Application"); 
         
      //Adding scene to the stage 
      stage.setScene(scene); 
         
      //Displaying the contents of the stage 
      stage.show(); 
   }   
   public static void main(String args[]){ 
      launch(args); 
   } 
}

Skompiluj i uruchom zapisany plik java z wiersza poleceń, używając następujących poleceń.

javac DisplayingText.java 
java DisplayingText

Podczas wykonywania powyższy program generuje okno JavaFX wyświetlające tekst, jak pokazano poniżej.