Escolar Documentos
Profissional Documentos
Cultura Documentos
JavaFX
Trabalhando com o JavaFX Scene Graph
Lançamento 8
E50683-01
Março 2014
E50683-01
Copyright © 2011, 2014, Oracle e/ou suas afiliadas. Todos os direitos reservados.
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
iii
Machine Translated by Google
4
Machine Translated by Google
Prefácio
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.
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.
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.
Explorando a API
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.
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
@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();
}
}
Esse código produz uma janela que se parece com a mostrada na Figura 1–3.
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.
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
Explorando a API
Exemplo 1–2.
@Sobrepor
public void start(Stage stage) { Group root = new
Group(); Scene cena = new Scene(root, 500,
500, Color.BLACK);
root.getChildren().add(r);
}
}
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.
Explorando a API
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.
@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);
Explorando a API
r.setFill(Color.BLUE);
root.getChildren().add(r);
TranslateTransition translate =
new TranslateTransition(Duration.millis(750));
traduzir.setToX(390);
traduzir.setToY(390);
}
}
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
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.