Você está na página 1de 12

Machine Translated by Google

JavaFX
Trabalhando com o JavaFX Scene Graph

Lançamento 8

E50683-01

Março 2014

Aprenda sobre o conceito de gráfico de cena e como ele é usado no JavaFX.


Machine Translated by Google

JavaFX Trabalhando com o JavaFX Scene Graph Release 8

E50683-01

Copyright © 2011, 2014, Oracle e/ou suas afiliadas. Todos os direitos reservados.

Autor Principal: Scott Hommel

Autor Colaborador:

Contribuinte:

Este software e a documentação relacionada são fornecidos sob um contrato de licença contendo restrições de uso e
divulgação e são protegidos por leis de propriedade intelectual. Exceto conforme expressamente permitido em seu contrato de
licença ou permitido por lei, você não pode usar, copiar, reproduzir, traduzir, transmitir, modificar, licenciar, transmitir, distribuir,
exibir, executar, publicar ou exibir qualquer parte, de qualquer forma, ou por qualquer meio. A engenharia reversa, desmontagem
ou descompilação deste software, a menos que exigido por lei para interoperabilidade, é proibida.

As informações aqui contidas estão sujeitas a alterações sem aviso prévio e não são garantidas como isentas de erros. Se
você encontrar algum erro, informe-nos por escrito.

Se este for um software ou documentação relacionada entregue ao governo dos EUA ou a qualquer pessoa licenciando-o
em nome do governo dos EUA, o seguinte aviso é aplicável:

DIREITOS DO GOVERNO DOS EUA Programas, software, bancos de dados e documentação relacionada e dados técnicos
entregues a clientes do governo dos EUA são "software de computador comercial" ou "dados técnicos comerciais" de acordo
com o Regulamento de Aquisição Federal aplicável e regulamentos suplementares específicos da agência. Como tal, o uso,
duplicação, divulgação, modificação e adaptação estarão sujeitos às restrições e termos de licença estabelecidos no contrato
governamental aplicável e, na medida aplicável pelos termos do contrato governamental, os direitos adicionais estabelecidos
em FAR 52.227-19, Licença de software de computador comercial (dezembro de 2007). Oracle America, Inc., 500 Oracle
Parkway, Redwood City, CA 94065.

Este software ou hardware é desenvolvido para uso geral em uma variedade de aplicativos de gerenciamento
de informações. Ele não foi desenvolvido ou destinado ao uso em quaisquer aplicações inerentemente perigosas, incluindo
aplicações que possam criar risco de ferimentos pessoais. Se você usar este software ou hardware em aplicativos
perigosos, será responsável por tomar todas as medidas apropriadas de proteção contra falhas, backup, redundância e
outras medidas para garantir seu uso seguro. A Oracle Corporation e suas afiliadas se isentam de qualquer responsabilidade
por quaisquer danos causados pelo uso deste software ou hardware em aplicativos perigosos.

Oracle e Java são marcas registradas da Oracle e/ou de suas afiliadas. Outros nomes podem ser marcas registradas de seus
respectivos proprietários.

Intel e Intel Xeon são marcas comerciais ou marcas registradas da Intel Corporation. Todas as marcas comerciais SPARC
são usadas sob licença e são marcas comerciais ou marcas registradas da SPARC International, Inc. AMD, Opteron, o
logotipo AMD e o logotipo AMD Opteron são marcas comerciais ou marcas registradas da Advanced Micro Devices. UNIX é
uma marca registrada licenciada pela X/Open Company, Ltd.

Este software ou hardware e documentação podem fornecer acesso ou informações sobre conteúdo, produtos e serviços de
terceiros. A Oracle Corporation e suas afiliadas não são responsáveis e se isentam expressamente de todas as garantias de
qualquer tipo com relação a conteúdo, produtos e serviços de terceiros. A Oracle Corporation e suas afiliadas não serão
responsáveis por quaisquer perdas, custos ou danos incorridos devido ao seu acesso ou uso de conteúdo, produtos ou
serviços de terceiros.
Machine Translated by Google

Conteúdo

1 Trabalhando com o JavaFX Scene Graph


Visão geral................................................. ................................................ ................................................ 1 -1

Explorando a API............................................. ................................................ ......................................... 1-2

iii
Machine Translated by Google

4
Machine Translated by Google

Prefácio

Este prefácio descreve os recursos e convenções de acessibilidade do documento usados neste


tutorial - Trabalhando com o JavaFX Scene Graph.

Público
Este documento destina-se a desenvolvedores JavaFX.

Acessibilidade da Documentação
Para obter informações sobre o compromisso da Oracle com a acessibilidade, visite
o site do Programa de Acessibilidade da Oracle em http://www.oracle.com/pls/topic/
lookup?ctx=acc&id=docacc.

Acesso ao Suporte Oracle


Os clientes Oracle têm acesso ao suporte eletrônico por meio do My Oracle Support. Para
obter informações, visite http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info ou visite
http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs se você são deficientes auditivos.

Documentos relacionados
Para obter mais informações, consulte os seguintes documentos no conjunto de documentação
do JavaFX: ÿ O que é JavaFX? ÿ Introdução ao JavaFX

Convenções
As seguintes convenções de texto são usadas neste documento:

Convenção Significado

negrito O tipo negrito indica elementos gráficos da interface do usuário associados a uma
ação ou termos definidos no texto ou no glossário.

itálico O tipo itálico indica títulos de livro, ênfase ou variáveis de espaço reservado para os
quais você fornece valores específicos.

monoespaço O tipo monoespaçado indica comandos dentro de um parágrafo, URLs, código em


exemplos, texto que aparece na tela ou texto que você insere.

v
Machine Translated by Google

vi
Machine Translated by Google

1
1Trabalhando com o JavaFX Scene Graph

Este tutorial explora a interface de programação de aplicativo (API) JavaFX Scene Graph, a
estrutura subjacente que renderiza suas interfaces gráficas com o usuário (GUI) na tela.

Se você for um desenvolvedor Java experiente, é provável que em algum momento tenha criado
um aplicativo com uma interface gráfica do usuário. Isso pode ser qualquer coisa, desde pequenos
programas em páginas da Web até aplicativos Swing autônomos na área de trabalho.
E se você já fez alguma pintura personalizada, você está familiarizado com a classe Graphics
e seus métodos relacionados. As abordagens tradicionais — por mais poderosas que sejam —
sempre exigiram algum esforço por parte do desenvolvedor para renderizar corretamente os
gráficos na tela. Esse trabalho geralmente é separado da maior parte da lógica do aplicativo.

Visão geral
A API JavaFX Scene Graph facilita a criação de interfaces gráficas com o usuário,
especialmente quando estão envolvidos efeitos visuais complexos e transformações. Um gráfico
de cena é uma estrutura de dados em árvore, mais comumente encontrada em aplicativos
gráficos e bibliotecas, como ferramentas de edição de vetores, bibliotecas 3D e videogames. O
gráfico de cena JavaFX é uma API de modo retido, o que significa que mantém um modelo
interno de todos os objetos gráficos em seu aplicativo. A qualquer momento, ele sabe quais
objetos exibir, quais áreas da tela precisam ser repintadas e como renderizar tudo da maneira mais eficiente.
Em vez de invocar métodos de desenho primitivos diretamente, você usa a API do gráfico
de cena e permite que o sistema lide automaticamente com os detalhes de renderização.
Essa abordagem reduz significativamente a quantidade de código necessária em seu aplicativo.

Os itens individuais contidos no grafo de cena JavaFX são conhecidos como nós. Cada nó é
classificado como um nó de ramificação (o que significa que pode ter filhos) ou um nó de folha
(o que significa que não pode ter filhos). O primeiro nó na árvore é sempre chamado de nó raiz
e nunca tem um pai. Veja um diagrama geral de herança na Figura 1–1.

Trabalhando com o JavaFX Scene Graph 1-1


Machine Translated by Google

Explorando a API

Figura 1–1 Raiz, Ramificação e Nós Folha

A API JavaFX define várias classes que podem atuar como nós raiz, ramificação ou folha.
Quando substituída por nomes de classe reais, essa mesma figura pode se parecer com a
mostrada na Figura 1–2 em um aplicativo real.

Figura 1–2 Classes Raiz, Ramo e Folha Específicas

Na Figura 1–2, um objeto Grupo atua como o nó raiz. Os objetos Circle e Rectangle são nós de
folha, porque eles não têm (e não podem) ter filhos. O objeto Region (que define uma área da
tela com filhos que podem ser estilizados usando CSS) é um nó de ramificação que contém mais
dois nós de folha (Text e ImageView). Os gráficos de cena podem se tornar muito maiores do
que isso, mas a organização básica — ou seja, a maneira como os nós pais contêm os nós filhos
— é um padrão que se repete em todos os aplicativos.

Explorando a API Então,


o que tudo isso significa em termos de código? Vamos começar configurando um
quadro de aplicativo básico, preenchido apenas com o nó raiz, conforme mostrado no Exemplo 1–1.

Exemplo 1–1 Criando o Application Frame


pacote cenagraphdemo;

importar javafx.application.Application; importar


javafx.scene.Group; importar javafx.scene.Scene;
importar javafx.scene.paint.Color; importar
javafx.stage.Stage;

public class Main extends Application {

1-2 JavaFX Trabalhando com o JavaFX Scene Graph


Machine Translated by Google

Explorando a API

@Sobrepor
public void start(Stage stage) { Group root = new
Group(); Scene cena = new Scene(root, 500,
500, Color.BLACK);
stage.setTitle("JavaFX Scene Graph Demo"); palco.setScene(cena);
palco.show();

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

}
}

Esse código produz uma janela que se parece com a mostrada na Figura 1–3.

Figura 1–3 Criando uma cena apenas com o nó raiz

Os pontos importantes a considerar são os seguintes:

1. A classe Main é uma extensão da classe javafx.application.Application . Seu método start é substituído e
recebe um objeto Stage (um container GUI de nível superior) como seu único parâmetro.

2. O nó raiz (neste caso, uma instância da classe javafx.scene.Group ) é criado e passado para o construtor
da cena, juntamente com a largura, altura e preenchimento da cena.

3. O título, a cena e a visibilidade do palco estão todos definidos.

4. O método principal chama o método Application.launch() .

O aplicativo resultante aparece como está porque o preto é a cor de preenchimento da cena.
Como o nó raiz atualmente não tem filhos, não há mais nada para exibir.
Adicionar um filho ao nó raiz pode ser feito com as modificações mostradas em

Trabalhando com o JavaFX Scene Graph 1-3


Machine Translated by Google

Explorando a API

Exemplo 1–2.

Exemplo 1–2 Adicionando um Nó Folha


pacote cenagraphdemo;

importar javafx.application.Application; importar


javafx.scene.Group; importar javafx.scene.Scene; importar
javafx.scene.paint.Color; import javafx.scene.shape.Rectangle;
importar javafx.stage.Stage;

public class Main extends Application {

@Sobrepor
public void start(Stage stage) { Group root = new
Group(); Scene cena = new Scene(root, 500,
500, Color.BLACK);

Rectangle r = new Rectangle(25,25,250,250); r.setFill(Color.BLUE);

root.getChildren().add(r);

stage.setTitle("JavaFX Scene Graph Demo"); palco.setScene(cena);


palco.show();

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

}
}

Com a alteração mostrada no Exemplo 1–2, um retângulo azul (nó folha) com 250 x 250
pixels aparecerá nas coordenadas X e Y especificadas. (Por padrão, X aumenta da esquerda
para a direita e Y aumenta de cima para baixo. No entanto, isso pode ser afetado por
transformações.) A Figura 1–4 mostra o resultado da adição de um nó folha.

1-4 JavaFX Trabalhando com o JavaFX Scene Graph


Machine Translated by Google

Explorando a API

Figura 1–4 Adicionando um Nó Folha

Como os objetos gráficos são gerenciados pelo gráfico de cena, você pode obter alguns efeitos
interessantes com muito pouco código extra. Por exemplo, você pode animar facilmente o
retângulo para saltar para frente e para trás na tela enquanto gira, altera seu tamanho e faz a
transição de sua cor de azul para vermelho.

O exemplo 1–3 usa transições para fazer isso acontecer:

Exemplo 1–3 Animando a cena


pacote cenagraphdemo;

importar javafx.animation.FillTransition; importar


javafx.application.Application; importar javafx.scene.Group;
importar javafx.scene.Scene; importar javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle; importar javafx.stage.Stage;
importar javafx.animation.Timeline; importar
javafx.animation.ParallelTransition; importar
javafx.animation.RotateTransition; importar
javafx.animation.ScaleTransition; importar
javafx.animation.TranslateTransition; importar javafx.util.Duration;

public class Main extends Application {

@Sobrepor
public void start(Stage stage) { Group root = new
Group(); Scene cena = new Scene(root, 500,
500, Color.BLACK); Rectangle r = new Rectangle(0, 0, 250, 250);

Trabalhando com o JavaFX Scene Graph 1-5


Machine Translated by Google

Explorando a API

r.setFill(Color.BLUE);
root.getChildren().add(r);

TranslateTransition translate =
new TranslateTransition(Duration.millis(750));
traduzir.setToX(390);
traduzir.setToY(390);

FillTransition fill = new FillTransition(Duration.millis(750)); fill.setToValue(Color.RED);

RotateTransition rotate = new RotateTransition(Duration.millis(750)); rotacionar.setToAngle(360);

ScaleTransition scale = new ScaleTransition(Duration.millis(750)); scale.setToX(0.1);


scale.setToY(0.1);

Transição ParallelTransition = new ParallelTransition(r, traduzir, preencher, girar,


dimensionar);
transição.setCycleCount(Timeline.INDEFINITE);
transição.setAutoReverse(true); transição.play();

stage.setTitle("JavaFX Scene Graph Demo");


palco.setScene(cena); palco.show();

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

}
}

Embora esses exemplos possam ser simples, eles identificam e demonstram alguns conceitos
importantes que você usará na maioria dos aplicativos gráficos.

O pacote javafx.scene define mais de uma dúzia de classes, mas três em particular são mais
importantes quando se trata de aprender como a API é estruturada: ÿ Node: a classe base

abstrata para todos os nós do grafo de cena. ÿ Pai: a classe base abstrata para todos os nós

de ramificação. (Esta classe se estende diretamente


Nó).
ÿ Cena: a classe de contêiner base para todo o conteúdo no gráfico de cena.

Essas classes base definem funcionalidades importantes que serão subsequentemente herdadas
pelas subclasses, incluindo ordem de pintura, visibilidade, composição de transformações,
suporte para estilo CSS e assim por diante. Você também encontrará várias classes de nó de
ramificação que herdam diretamente da classe Parent , como Control, Group, Region e WebView.
As classes de nó folha são definidas em vários pacotes adicionais, como javafx.scene.shape e
javafx.scene.text.

1-6 JavaFX Trabalhando com o JavaFX Scene Graph

Você também pode gostar