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.