JavaFX - Aplicativo

Neste capítulo, discutiremos a estrutura de um aplicativo JavaFX em detalhes e também aprenderemos a criar um aplicativo JavaFX com um exemplo.

Estrutura do aplicativo JavaFX

Em geral, um aplicativo JavaFX terá três componentes principais, a saber Stage, Scene e Nodes conforme mostrado no diagrama a seguir.

Palco

Um palco (uma janela) contém todos os objetos de um aplicativo JavaFX. É representado porStage classe do pacote javafx.stage. O estágio primário é criado pela própria plataforma. O objeto de estágio criado é passado como um argumento para ostart() método do Application classe (explicada na próxima seção).

Um estágio tem dois parâmetros que determinam sua posição, a saber Width e Height. Está dividida em Área de Conteúdo e Decorações (Barra de Título e Bordas).

Existem cinco tipos de estágios disponíveis -

  • Decorated
  • Undecorated
  • Transparent
  • Unified
  • Utility

Você tem que ligar para o show() método para exibir o conteúdo de um palco.

Cena

Uma cena representa o conteúdo físico de um aplicativo JavaFX. Ele contém todo o conteúdo de um gráfico de cena. A classeScene do pacote javafx.scenerepresenta o objeto da cena. Em uma instância, o objeto de cena é adicionado a apenas um palco.

Você pode criar uma cena instanciando a Classe de cena. Você pode optar pelo tamanho da cena passando suas dimensões (altura e largura) junto com oroot node para seu construtor.

Gráfico de cena e nós

UMA scene graphé uma estrutura de dados em forma de árvore (hierárquica) que representa o conteúdo de uma cena. Em contraste, umnode é um objeto visual / gráfico de um gráfico de cena.

Um nó pode incluir -

  • Objetos geométricos (gráficos) (2D e 3D), como - Círculo, Retângulo, Polígono, etc.

  • Controles de IU, como - Botão, caixa de seleção, caixa de seleção, área de texto, etc.

  • Recipientes (painéis de layout), como painel de borda, painel de grade, painel de fluxo, etc.

  • Elementos de mídia, como áudio, vídeo e objetos de imagem.

o Node Classe do pacote javafx.scene representa um nó em JavaFX, esta classe é a superclasse de todos os nós.

Como discutido anteriormente, um nó é de três tipos -

  • Root Node - O primeiro gráfico de cena é conhecido como nó raiz.

  • Branch Node/Parent Node- Os nós com nós filhos são conhecidos como nós de ramificação / pai. A classe abstrata chamadaParent do pacote javafx.scene é a classe base de todos os nós pais, e esses nós pais serão dos seguintes tipos -

    • Group- Um nó de grupo é um nó coletivo que contém uma lista de nós filhos. Sempre que o nó do grupo é renderizado, todos os seus nós filhos são renderizados em ordem. Qualquer transformação, estado de efeito aplicado ao grupo será aplicado a todos os nós filhos.

    • Region - É a classe base de todos os controles de IU baseados em Nó JavaFX, como Gráfico, Painel e Controle.

    • WebView - Este nó gerencia o mecanismo da web e exibe seu conteúdo.

  • Leaf Node- O nó sem nós filhos é conhecido como nó folha. Por exemplo, Rectangle, Ellipse, Box, ImageView, MediaView são exemplos de nós folha.

É obrigatório passar o nó raiz para o grafo de cena. Se o grupo for passado como root, todos os nós serão recortados para a cena e qualquer alteração no tamanho da cena não afetará o layout da cena.

Criação de um aplicativo JavaFX

Para criar um aplicativo JavaFX, você precisa instanciar a classe Application e implementar seu método abstrato start(). Neste método, escreveremos o código para o aplicativo JavaFX.

Classe de Aplicação

o Application classe do pacote javafx.applicationé o ponto de entrada do aplicativo em JavaFX. Para criar um aplicativo JavaFX, você precisa herdar esta classe e implementar seu método abstratostart(). Neste método, você precisa escrever todo o código para os gráficos JavaFX

No main método, você deve iniciar o aplicativo usando o launch()método. Este método chama internamente ostart() método da classe Application, conforme mostrado no programa a seguir.

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);      
   } 
}

Dentro do start() método, a fim de criar um aplicativo JavaFX típico, você precisa seguir as etapas abaixo -

  • Prepare um grafo de cena com os nós necessários.

  • Prepare uma cena com as dimensões necessárias e adicione o gráfico de cena (nó raiz do gráfico de cena) a ela.

  • Prepare um palco e adicione a cena ao palco e exiba o conteúdo do palco.

Preparando o Gráfico de Cena

De acordo com sua aplicação, você precisa preparar um grafo de cena com os nós necessários. Como o nó raiz é o primeiro nó, você precisa criar um nó raiz. Como um nó raiz, você pode escolher entreGroup, Region or WebView.

Group - Um nó de grupo é representado pela classe chamada Group que pertence ao pacote javafx.scene, você pode criar um nó Grupo instanciando essa classe conforme mostrado abaixo.

Group root = new Group();

o getChildren() método do Group classe dá a você um objeto da ObservableListclasse que contém os nós. Podemos recuperar este objeto e adicionar nós a ele, conforme mostrado abaixo.

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

Também podemos adicionar objetos Node ao grupo, apenas passando-os para o Group classe e ao seu construtor no momento da instanciação, conforme mostrado abaixo.

Group root = new Group(NodeObject);

Region - É a classe base de todos os controles de IU baseados em nó JavaFX, como -

  • Chart - Esta classe é a classe base de todos os gráficos e pertence ao pacote javafx.scene.chart.

    Esta classe tem duas subclasses, que são - PieChart e XYChart. Esses dois, por sua vez, têm subclasses comoAreaChart, BarChart, BubbleChart, etc. usado para desenhar diferentes tipos de gráficos XY-Plane em JavaFX.

    Você pode usar essas classes para incorporar gráficos em seu aplicativo.

  • Pane - Um painel é a classe base de todos os painéis de layout, como AnchorPane, BorderPane, DialogPane, etc. Esta classe pertence a um pacote que é chamado de - javafx.scene.layout.

    Você pode usar essas classes para inserir layouts predefinidos em seu aplicativo.

  • Control - É a classe base dos controles da interface do usuário, como Accordion, ButtonBar, ChoiceBox, ComboBoxBase, HTMLEditor, etc. This class belongs to the package javafx.scene.control.

    Você pode usar essas classes para inserir vários elementos de interface do usuário em seu aplicativo.

Em um Grupo, você pode instanciar qualquer uma das classes mencionadas acima e usá-las como nós raiz, conforme mostrado no programa a seguir.

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

WebView - Este nó gerencia o mecanismo da web e exibe seu conteúdo.

A seguir está um diagrama que representa a hierarquia de classes de nós do JavaFX.

Preparando a cena

Uma cena JavaFX é representada pelo Scene classe do pacote javafx.scene. Você pode criar uma cena instanciando esta classe como mostrado no seguinte bloco de bacalhau.

Durante a instanciação, é obrigatório passar o objeto raiz para o construtor da classe de cena.

Scene scene = new Scene(root);

Você também pode passar dois parâmetros do tipo duplo que representam a altura e largura da cena como mostrado abaixo.

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

Preparando o Palco

Este é o contêiner de qualquer aplicativo JavaFX e fornece uma janela para o aplicativo. É representado peloStage classe do pacote javafx.stage. Um objeto desta classe é passado como um parâmetro dostart() método do Application classe.

Usando este objeto, você pode realizar várias operações no palco. Primeiramente, você pode realizar o seguinte -

  • Defina o título do palco usando o método setTitle().

  • Anexe o objeto da cena ao palco usando o setScene() método.

  • Exiba o conteúdo da cena usando o show() método conforme mostrado abaixo.

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

Ciclo de vida do aplicativo JavaFX

A classe de aplicativo JavaFX tem três métodos de ciclo de vida, que são -

  • start() - O método de ponto de entrada onde o código gráfico JavaFX deve ser escrito.

  • stop() - Um método vazio que pode ser sobrescrito, aqui você pode escrever a lógica para parar o aplicativo.

  • init() - Um método vazio que pode ser sobrescrito, mas você não pode criar palco ou cena neste método.

Além disso, ele fornece um método estático chamado launch() para iniciar o aplicativo JavaFX.

Desde o launch()método é estático, você precisa chamá-lo de um contexto estático (principal geralmente). Sempre que um aplicativo JavaFX é iniciado, as seguintes ações serão realizadas (na mesma ordem).

  • Uma instância da classe do aplicativo é criada.

  • Init() método é chamado.

  • o start() método é chamado.

  • O inicializador espera que o aplicativo termine e chama o stop() método.

Encerrando o aplicativo JavaFX

Quando a última janela do aplicativo é fechada, o aplicativo JavaFX é encerrado implicitamente. Você pode desativar esse comportamento passando o valor booleano “False” para o método estático setImplicitExit() (deve ser chamado de um contexto estático).

Você pode encerrar um aplicativo JavaFX explicitamente usando os métodos Platform.exit() ou System.exit(int).

Exemplo 1 - Criando uma janela vazia

Esta seção ensina como criar um aplicativo de amostra JavaFX que exibe uma janela vazia. A seguir estão as etapas -

Etapa 1: Criação de uma classe

Crie uma classe Java e herde o Application classe do pacote javafx.application e implemente o método start () dessa classe como segue.

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

Etapa 2: Criação de um objeto de grupo

No start() método cria um objeto de grupo instanciando a classe chamada Group, que pertence ao pacote javafx.scene, do seguinte modo.

Group root = new Group();

Etapa 3: Criação de um objeto de cena

Crie uma cena instanciando a classe chamada Scene que pertence ao pacote javafx.scene. Para esta classe, passe o objeto Grupo(root), criado na etapa anterior.

Além do objeto raiz, você também pode passar dois parâmetros duplos que representam a altura e a largura da tela junto com o objeto da classe Grupo da seguinte maneira.

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

Etapa 4: definir o título do palco

Você pode definir o título do palco usando o setTitle() método do Stageclasse. oprimaryStage é um objeto Stage que é passado para o método start da classe Scene, como um parâmetro.

Usando o primaryStage objeto, defina o título da cena como Sample Application como mostrado abaixo.

primaryStage.setTitle("Sample Application");

Etapa 5: adicionando cena ao palco

Você pode adicionar um objeto Scene ao palco usando o método setScene() da classe chamada Stage. Adicione o objeto Scene preparado nas etapas anteriores usando este método conforme mostrado abaixo.

primaryStage.setScene(scene);

Etapa 6: Exibindo o conteúdo do palco

Exibir o conteúdo da cena usando o método chamado show() do Stage classe da seguinte forma.

primaryStage.show();

Etapa 7: iniciar o aplicativo

Inicie o aplicativo JavaFX chamando o método estático launch() do Application classe do método principal da seguinte forma.

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

Exemplo

O programa a seguir gera uma janela JavaFX vazia. Salve este código em um arquivo com o nomeJavafxSample.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);     
   }         
}

Compile e execute o arquivo java salvo no prompt de comando usando os comandos a seguir.

javac JavafxSample.java 
java JavafxSample

Ao ser executado, o programa acima gera uma janela JavaFX conforme mostrado abaixo.

Exemplo 2 - Desenhando uma linha reta

No exemplo anterior, vimos como criar um palco vazio, agora, neste exemplo, vamos tentar desenhar uma linha reta usando a biblioteca JavaFX.

A seguir estão as etapas -

Etapa 1: Criação de uma classe

Crie uma classe Java e herde o Application classe do pacote javafx.application e implementar o start() método desta classe da seguinte forma.

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

Etapa 2: Criação de uma linha

Você pode criar uma linha em JavaFX instanciando a classe chamada Line que pertence a um pacote javafx.scene.shape, instancie essa classe da seguinte maneira.

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

Etapa 3: Definir propriedades para a linha

Especifique as coordenadas para desenhar a linha em um plano XY, definindo as propriedades startX, startY, endX e endY, usando seus respectivos métodos configuradores, conforme mostrado no bloco de código a seguir.

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

Etapa 4: Criação de um objeto de grupo

No método start (), crie um objeto de grupo instanciando a classe chamada Group, que pertence ao pacote javafx.scene.

Passe o objeto Linha (nó), criado na etapa anterior, como parâmetro para o construtor da classe Grupo, a fim de adicioná-lo ao grupo da seguinte maneira -

Group root = new Group(line);

Etapa 5: Criação de um objeto de cena

Crie uma cena instanciando a classe chamada Scene que pertence ao pacote javafx.scene. Para esta classe, passe o objeto Grupo(root) que foi criado na etapa anterior.

Além do objeto raiz, você também pode passar dois parâmetros duplos que representam a altura e a largura da tela junto com o objeto da classe Grupo da seguinte maneira.

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

Etapa 6: definir o título do palco

Você pode definir o título do palco usando o setTitle() método do Stageclasse. oprimaryStage é um objeto Stage que é passado para o método start da classe Scene, como um parâmetro.

Usando o primaryStage objeto, defina o título da cena como Sample Application do seguinte modo.

primaryStage.setTitle("Sample Application");

Etapa 7: Adicionando cena ao palco

Você pode adicionar um objeto Scene ao palco usando o método setScene() da classe chamada Stage. Adicione o objeto Scene preparado nas etapas anteriores usando este método como segue.

primaryStage.setScene(scene);

Etapa 8: Exibindo o conteúdo do palco

Exibir o conteúdo da cena usando o método chamado show() do Stage classe da seguinte forma.

primaryStage.show();

Etapa 9: iniciar o aplicativo

Inicie o aplicativo JavaFX chamando o método estático launch() do Application classe do método principal da seguinte forma.

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

Exemplo

O programa a seguir mostra como gerar uma linha reta usando JavaFX. Salve este código em um arquivo com o nomeJavafxSample.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); 
   } 
}

Compile e execute o arquivo java salvo no prompt de comando usando os comandos a seguir.

javac DrawingLine.java 
java DrawingLine

Ao ser executado, o programa acima gera uma janela JavaFX exibindo uma linha reta conforme mostrado abaixo.

Exemplo 3 - Exibindo texto

Também podemos inserir texto na cena JavaFX. Este exemplo mostra como incorporar texto em JavaFX.

A seguir estão as etapas -

Etapa 1: Criação de uma classe

Crie uma classe Java e herde o Application classe do pacote javafx.application e implementar o start() método desta classe da seguinte forma.

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

Etapa 2: Incorporar Texto

Você pode incorporar texto em uma cena JavaFX instanciando a classe chamada Text que pertence a um pacote javafx.scene.shape, instanciar esta classe.

Você pode instanciar essa classe passando o texto a ser incorporado, no formato String. Ou você pode criar um objeto de texto usando o construtor padrão, conforme mostrado abaixo.

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

Etapa 3: Definir a fonte

Você pode definir a fonte do texto usando o setFont() método do Textclasse. Este método aceita um objeto de fonte como parâmetros. Defina a fonte do texto fornecido como 45, conforme mostrado abaixo.

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

Etapa 4: Definir a posição do texto

Você pode definir a posição do texto no plano XY definindo as coordenadas X, Y usando os respectivos métodos de definição setX() e setY() do seguinte modo.

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

Etapa 5: Definir o texto a ser adicionado

Você pode definir o texto a ser adicionado usando o método setText () da classe Text. Este método aceita um parâmetro de string que representa o texto a ser adicionado.

text.setText("Welcome to Tutorialspoint");

Etapa 6: Criação de um objeto de grupo

No start() método, crie um objeto de grupo instanciando a classe chamada Grupo, que pertence ao pacote javafx.scene.

Passe o objeto Texto (nó), criado na etapa anterior, como parâmetro para o construtor da classe Grupo, a fim de adicioná-lo ao grupo da seguinte maneira -

Group root = new Group(text)

Etapa 7: Criação de um objeto de cena

Crie uma cena instanciando a classe chamada Scene que pertence ao pacote javafx.scene. Para esta classe, passe o objeto Grupo(root), criado na etapa anterior.

Além do objeto raiz, você também pode passar dois parâmetros duplos que representam a altura e a largura da tela junto com o objeto da classe Grupo da seguinte maneira.

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

Etapa 8: Definir o título do palco

Você pode definir o título do palco usando o setTitle() método do Stageclasse. oprimaryStage é um objeto Stage que é passado para o método start da classe Scene, como um parâmetro.

Usando o primaryStage objeto, defina o título da cena como Sample Application como mostrado abaixo.

primaryStage.setTitle("Sample Application");

Etapa 9: Adicionando cena ao palco

Você pode adicionar um objeto Scene ao palco usando o método setScene() da classe chamada Stage. Adicione o objeto Scene preparado nas etapas anteriores usando este método como segue.

primaryStage.setScene(scene);

Etapa 10: Exibindo o conteúdo do palco

Exibir o conteúdo da cena usando o método chamado show() do Stage classe da seguinte forma.

primaryStage.show();

Etapa 11: iniciar o aplicativo

Inicie o aplicativo JavaFX chamando o método estático launch() do Application classe do método principal da seguinte forma.

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

Exemplo

A seguir está o programa para exibir texto usando JavaFX. Salve este código em um arquivo com o nomeDisplayingText.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); 
   } 
}

Compile e execute o arquivo java salvo no prompt de comando usando os comandos a seguir.

javac DisplayingText.java 
java DisplayingText

Ao ser executado, o programa acima gera uma janela JavaFX exibindo o texto conforme mostrado abaixo.