Escolar Documentos
Profissional Documentos
Cultura Documentos
JavaFX
Introdução ao JavaFX
Lançamento 8
E50607-02
Agosto de
2014 Comece a usar o JavaFX obtendo uma visão
geral dos recursos disponíveis, aprendendo a arquitetura
e criando aplicativos simples que apresentam layouts,
CSS, FXML, efeitos visuais e animação.
Machine Translated by Google
E50607-02
Copyright © 2008, 2014, Oracle e/ou suas afiliadas. Todos os direitos reservados.
Autor contribuinte: Jasper Potts, Nancy Hildebrandt, Joni Gordon, Cindy Castillo
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:
USUÁRIOS FINAIS DO GOVERNO DOS EUA: Os programas da Oracle, incluindo qualquer sistema operacional, software
integrado, quaisquer programas instalados no hardware e/ou documentação, entregues aos usuários finais do governo dos
EUA são "software de computador comercial" de acordo com o Regulamento de Aquisição Federal aplicável e agência-
regulamentos complementares específicos. Assim, o uso, duplicação, divulgação, modificação e adaptação dos programas,
incluindo qualquer sistema operacional, software integrado, quaisquer programas instalados no hardware e/ou documentação,
estará sujeito aos termos de licença e restrições de licença aplicáveis aos programas . Nenhum outro direito é concedido ao
governo dos EUA.
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 do The Open Group.
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
Prefácio................................................. ................................................ ................................................ ........... vii
iii
Machine Translated by Google
Use uma linguagem de script para lidar com eventos ....................................... ......................................... 6-6
Estilo a Aplicação com CSS............................................... ................................................ .............. 6-7 Para
onde ir a partir daqui .............................. ................................................ ................................................ 6- 8
4
Machine Translated by Google
v
Machine Translated by Google
vi
Machine Translated by Google
Prefácio
Este prefácio fornece uma visão geral sobre este tutorial e também descreve os recursos e
convenções de acessibilidade de documentos usados neste tutorial - Introdução ao JavaFX
desenvolvimento de aplicativos.
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 o restante da documentação do JavaFX
definida em http://docs.oracle.com/javase/javase-clienttechnologies.htm.
vii
Machine Translated by Google
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.
viii
Machine Translated by Google
O que há de novo
Este capítulo resume os novos recursos e mudanças significativas no produto feitas no componente
JavaFX da versão Java SE 8. ÿ O novo tema Modena agora é o tema padrão para aplicativos
ÿ O suporte para recursos HTML5 adicionais foi adicionado. Consulte Adicionando HTML
Conteúdo para aplicativos JavaFX para obter mais informações.
ÿ Novos controles integrados de interface do usuário, DatePicker e TableView, agora estão disponíveis. Consulte o documento
Usando controles de interface do usuário JavaFX para obter mais informações.
ÿ A biblioteca de gráficos 3D foi aprimorada com várias novas classes de API. Consulte a seção
Recursos de gráficos 3D em Principais recursos e Introdução aos gráficos 3D JavaFX para
obter mais informações.
ix
Machine Translated by Google
x
Machine Translated by Google
Parte I
Parte IO que é JavaFX?
1
Visão geral do JavaFX
1
Este capítulo fornece uma visão geral dos tipos de aplicativos que você pode criar usando APIs
JavaFX, onde baixar as bibliotecas JavaFX e informações de alto nível sobre os principais recursos
JavaFX que estão sendo entregues.
JavaFX é um conjunto de pacotes gráficos e de mídia que permite aos desenvolvedores projetar,
criar, testar, depurar e implantar aplicativos rich client que operam consistentemente em diversas
plataformas. ÿ Aplicativos JavaFX ÿ Disponibilidade ÿ Principais recursos
Aplicativos JavaFX
Como a biblioteca JavaFX é escrita como uma API Java, o código do aplicativo JavaFX pode fazer
referência a APIs de qualquer biblioteca Java. Por exemplo, aplicativos JavaFX podem usar bibliotecas de
API Java para acessar recursos nativos do sistema e conectar-se a aplicativos de middleware baseados
em servidor.
A aparência dos aplicativos JavaFX pode ser personalizada. Cascading Style Sheets (CSS) separa a
aparência e o estilo da implementação para que os desenvolvedores possam se concentrar na
codificação. Os designers gráficos podem personalizar facilmente a aparência e o estilo do aplicativo
por meio do CSS. Se você tiver experiência em web design ou se quiser separar a interface do usuário
(IU) e a lógica de back-end, poderá desenvolver os aspectos de apresentação da IU na linguagem de
script FXML e usar o código Java para o aplicativo lógica. Se você preferir projetar UIs sem escrever
código, use o JavaFX Scene Builder. À medida que você projeta a interface do usuário, o Scene Builder
cria marcação FXML que pode ser portada para um ambiente de desenvolvimento integrado (IDE) para
que os desenvolvedores possam adicionar a lógica de negócios.
Disponibilidade
Disponibilidade
As APIs JavaFX estão disponíveis como um recurso totalmente integrado do Java SE Runtime
Environment (JRE) e do Java Development Kit (JDK). Como o JDK está disponível para todas as principais
plataformas de desktop (Windows, Mac OS X e Linux), os aplicativos JavaFX compilados para JDK 7 e
posteriores também são executados em todas as principais plataformas de desktop. O suporte para plataformas
ARM também foi disponibilizado com o JavaFX 8. O JDK para ARM inclui os componentes básicos, gráficos e
de controle do JavaFX.
A compatibilidade entre plataformas permite uma experiência de tempo de execução consistente para
desenvolvedores e usuários de aplicativos JavaFX. A Oracle garante versões e atualizações sincronizadas
em todas as plataformas e oferece um amplo programa de suporte para empresas que executam aplicativos
de missão crítica.
Na página de download do JDK, você pode obter um arquivo zip de aplicativos de exemplo JavaFX. Os
aplicativos de exemplo fornecem muitos exemplos de código e snippets que mostram por exemplo como
escrever aplicativos JavaFX. Consulte "Como executo um aplicativo de amostra?" Para maiores informações.
Principais recursos
Os recursos a seguir estão incluídos no JavaFX 8 e versões posteriores. Os itens que foram introduzidos
na versão JavaFX 8 são indicados de acordo: ÿ APIs Java. JavaFX é uma biblioteca Java que consiste
em classes e interfaces escritas em código Java. As APIs são projetadas para serem uma alternativa
amigável às linguagens Java Virtual Machine (Java VM), como JRuby e Scala.
ÿ FXML e Construtor de cenas. FXML é uma linguagem de marcação declarativa baseada em XML para
construir uma interface de usuário de aplicativo JavaFX. Um designer pode codificar em FXML ou usar o
JavaFX Scene Builder para projetar interativamente a interface gráfica do usuário (GUI). O Scene Builder
gera marcação FXML que pode ser portada para um IDE onde um desenvolvedor pode adicionar a lógica
de negócios.
ÿ Interoperabilidade Swing. Os aplicativos Swing existentes podem ser atualizados com recursos JavaFX,
como reprodução de mídia gráfica avançada e conteúdo da Web incorporado. A classe SwingNode ,
que permite incorporar conteúdo Swing em aplicativos JavaFX, foi incluída no JavaFX 8. Consulte o
javadoc da API SwingNode e Incorporando conteúdo Swing em aplicativos JavaFX para obter mais
informações.
ÿ Controles de interface do usuário e CSS integrados. O JavaFX fornece todos os principais controles
de interface do usuário necessários para desenvolver um aplicativo completo. Os componentes podem
ser revestidos com tecnologias padrão da Web, como CSS. Os controles DatePicker e TreeTableView
UI agora estão disponíveis com a versão JavaFX 8. Consulte Usando controles de interface do usuário
JavaFX para obter mais informações. Além disso, as classes CSS Styleable* tornaram-se API pública,
permitindo que objetos sejam estilizados por CSS.
ÿ Tema de Modena. O tema Modena substitui o tema Caspian como padrão para aplicativos JavaFX 8. O
tema Caspian ainda está disponível para seu uso adicionando a linha
setUserAgentStylesheet(STYLESHEET_CASPIAN) no método start() do aplicativo. Para obter mais
informações, consulte o blog Modena em fxexperience.com
ÿ Recursos gráficos 3D. As novas classes API para Shape3D ( subclasses Box, Cylinder,
MeshView e Sphere), SubScene, Material, PickResult, LightBase (subclasses
AmbientLight e PointLight ) e SceneAntialiasing foram adicionadas à biblioteca de gráficos 3D
no JavaFX 8. A classe Camera API também foi atualizado nesta versão. Para obter mais
informações, consulte o documento Getting Started with JavaFX 3D Graphics e o javadoc API
correspondente para javafx.scene.shape.Shape3D, javafx.scene.SubScene,
javafx.scene.paint.Material, javafx.scene.input.PickResult e javafx.scene.SceneAntialiasing.
ÿ API de tela. A API Canvas permite desenhar diretamente dentro de uma área da cena JavaFX
que consiste em um elemento gráfico (nó).
ÿ Suporte a Rich Text. JavaFX 8 traz suporte de texto aprimorado para JavaFX, incluindo texto
bidirecional e scripts de texto complexos, como tailandês e hindu em controles, e texto multilinha
e multiestilo em nós de texto.
ÿ Suporte multitoque. O JavaFX fornece suporte para operações multitoque, com base
nas capacidades da plataforma subjacente. ÿ Suporte
A Tabela 1–1 mostra imagens de alguns dos aplicativos JavaFX de amostra incluídos na versão
JavaFX 8.n.
JavaFX Ensemble8
Modena
Visualizador 3D
Observação: antes de poder executar um aplicativo JavaFX de amostra, você precisa ter as bibliotecas de tempo de
execução JavaFX em sua máquina. Antes de prosseguir com essas etapas, instale a versão mais recente do JDK 8 ou
2. Role para baixo para localizar a seção JDK 8 e JavaFX Demos and Samples.
4. Na página de downloads do Java SE Development Kit 8, role para baixo até a página JavaFX
Seção de Downloads de Demonstrações e Amostras.
Por exemplo, para executar o aplicativo de amostra pré-criado Ensemble8, clique duas vezes no arquivo
Ensemble8.jar .
Você pode usar vários IDEs de desenvolvimento Java para desenvolver aplicativos JavaFX. As etapas a
seguir explicam como exibir e executar o código-fonte no NetBeans IDE.
2. Em um IDE NetBeans 7.4 ou posterior, carregue o projeto para a amostra que deseja visualizar.
..\javafx_samples-8.x-<plataforma>\javafx-samples-8.x\src
3. Na janela Projetos, clique com o botão direito do mouse no projeto que acabou de abrir e selecione Executar.
Observe que a janela Saída é atualizada e o projeto de amostra é executado e implantado.
Como os aplicativos JavaFX são escritos na linguagem Java, você pode usar seu editor favorito ou qualquer
ambiente de desenvolvimento integrado (IDE) que suporte a linguagem Java (como NetBeans, Eclipse ou IntelliJ
IDEA) para criar aplicativos JavaFX.
2. Use Getting Started with JavaFX Sample Applications para criar aplicativos simples que demonstrem como trabalhar
com layouts, folhas de estilo e efeitos visuais.
3. Use o JavaFX Scene Builder para projetar a interface do usuário para seu aplicativo JavaFX sem codificação.
Você pode arrastar e soltar os componentes da interface do usuário em uma área de trabalho, modificar
suas propriedades, aplicar folhas de estilo e integrar o código resultante à lógica do aplicativo. a. Faça o
download do JavaFX Scene Builder na página de downloads do JavaFX em
http://www.oracle.com/technetwork/java/javase/downloads/.
Recursos
Recursos
Use os recursos a seguir para aprender mais sobre a tecnologia JavaFX. ÿ
Faça o download da versão mais recente do JDK 8 e dos exemplos do JavaFX na
página de downloads do Java SE em: http://www.oracle.com/technetwork/java/
javase/downloads/.
2
2Entendendo a arquitetura JavaFX
A Figura 2–1 ilustra os componentes arquitetônicos da plataforma JavaFX. As seções após o diagrama
descrevem cada componente e como as partes se interconectam. Abaixo das APIs públicas do JavaFX
está o mecanismo que executa seu código JavaFX.
É composto por subcomponentes que incluem um motor gráfico JavaFX de alto desempenho, denominado
Prism; um pequeno e eficiente sistema de janelas, chamado Glass; um mecanismo de mídia e um mecanismo
da web. Embora esses componentes não sejam expostos publicamente, suas descrições podem ajudá-lo a
entender melhor o que executa um aplicativo JavaFX. ÿ Gráfico de cena
ÿ Componente da Web
ÿ CSS
ÿ Controles de IU
ÿ Layout
ÿ Efeitos Visuais
Gráfico de cena
Gráfico de cena O
gráfico de cena JavaFX, mostrado como parte da camada superior na Figura 2–1, é o ponto de partida
para construir um aplicativo JavaFX. É uma árvore hierárquica de nós que representa todos os
elementos visuais da interface do usuário do aplicativo. Ele pode manipular a entrada e pode ser
renderizado.
Um único elemento em um grafo de cena é chamado de nó. Cada nó tem um ID, classe de estilo e
volume delimitador. Com exceção do nó raiz de um grafo de cena, cada nó em um grafo de cena tem um
único pai e zero ou mais filhos. Também pode ter o seguinte:
ÿ Opacidade
ÿ Transformações
Window Toolkit (AWT), o grafo de cena JavaFX também inclui as primitivas gráficas, como retângulos
e texto, além de ter controles, contêineres de layout, imagens e mídia.
Para a maioria dos usos, o gráfico de cena simplifica o trabalho com UIs, especialmente quando UIs
ricas são usadas. A animação de vários gráficos no gráfico de cena pode ser realizada rapidamente
usando as APIs javafx.animation e métodos declarativos, como documento XML, também funcionam
bem.
ÿ Nós: formas (2D e 3D), imagens, mídia, navegador da Web incorporado, texto, interface do usuário
controles, gráficos, grupos e contêineres
ÿ Efeitos: objetos simples que alteram a aparência dos nós do gráfico de cena, como desfoques,
sombras e ajuste de cor
Para obter mais informações, consulte o documento Trabalhando com o JavaFX Scene Graph.
ÿ Tornar mais fácil para os desenvolvedores da Web usar o JavaFX de outros recursos dinâmicos baseados em JVM
linguagens, como Groovy e JavaScript.
ÿ Permitir que desenvolvedores Java usem outras linguagens de sistema, como Groovy, para escrever
aplicativos JavaFX grandes ou complexos.
ÿ Permitir o uso de vinculação, que inclui suporte para vinculação preguiçosa de alto desempenho,
expressões de vinculação, expressões de sequência vinculada e reavaliação de vinculação
parcial. Linguagens alternativas (como Groovy) podem usar essa biblioteca de vinculação para
introduzir uma sintaxe de vinculação semelhante à do JavaFX Script.
ÿ Estenda a biblioteca de coleções Java para incluir listas e mapas observáveis, que
permitem que os aplicativos conectem interfaces de usuário a modelos de dados, observem alterações nesses
modelos de dados e atualizem o controle de interface do usuário correspondente de acordo.
As APIs JavaFX e o modelo de programação são uma continuação da linha de produtos JavaFX 1.x. A
maioria das APIs JavaFX foram portadas diretamente para Java. Algumas APIs, como Layout e Mídia, juntamente
com muitos outros detalhes, foram aprimoradas e simplificadas com base no feedback recebido dos usuários da
versão JavaFX 1.x. JavaFX depende mais de padrões da web, como CSS para controles de estilo e ARIA para
especificações de acessibilidade. O uso de padrões adicionais da web também está sob revisão.
Sistema Gráfico
O JavaFX Graphics System, mostrado em azul na Figura 2–1, é um detalhe de implementação abaixo da camada do
grafo de cena JavaFX. Ele suporta gráficos de cena 2-D e 3-D. Ele fornece renderização de software quando o
hardware gráfico em um sistema é insuficiente para suportar a renderização acelerada por hardware.
Dois pipelines acelerados por gráficos são implementados na plataforma JavaFX: ÿ Os processos Prism
renderizam tarefas. Ele pode ser executado em renderizadores de hardware e software, incluindo 3-D. É responsável
pela rasterização e renderização de cenas JavaFX.
Os vários caminhos de renderização a seguir são possíveis com base no dispositivo que está sendo usado:
– DirectX 11 no Windows 7
O caminho totalmente acelerado por hardware é usado quando possível, mas quando não está disponível,
o caminho de renderização de software é usado porque o caminho de renderização de software já está
distribuído em todos os Java Runtime Environments (JREs). Isso é particularmente importante ao lidar
com cenas 3-D. No entanto, o desempenho é melhor quando os caminhos de renderização de hardware
são usados.
ÿ O Quantum Toolkit une o Prism e o Glass Windowing Toolkit e os torna disponíveis para a camada JavaFX
acima deles na pilha. Ele também gerencia as regras de encadeamento relacionadas à renderização versus
manipulação de eventos.
O Glass Windowing Toolkit, mostrado em bege na parte central da Figura 2–1, é o nível mais baixo na pilha de
gráficos JavaFX. Sua principal responsabilidade é fornecer serviços operacionais nativos, como gerenciamento de
janelas, temporizadores e superfícies. Ele serve como a camada dependente de plataforma que conecta a
plataforma JavaFX ao sistema operacional nativo.
O kit de ferramentas Glass também é responsável por gerenciar a fila de eventos. Ao contrário do Abstract Window
Toolkit (AWT), que gerencia sua própria fila de eventos, o Glass toolkit usa a funcionalidade de fila de eventos do
sistema operacional nativo para agendar o uso do thread. Também diferente do AWT, o kit de ferramentas Glass é
executado no mesmo encadeamento que o aplicativo JavaFX. No AWT, a metade nativa do AWT é executada em um
thread e o nível Java é executado em outro
Mídia e Imagens
fio. Isso apresenta muitos problemas, muitos dos quais são resolvidos no JavaFX usando a abordagem de
encadeamento de aplicativo JavaFX único.
Tópicos
O sistema executa dois ou mais dos seguintes encadeamentos a qualquer momento. ÿ
Encadeamento do aplicativo JavaFX: este é o encadeamento principal usado pelos desenvolvedores de aplicativos
JavaFX. Qualquer cena “ao vivo”, que é uma cena que faz parte de uma janela, deve ser acessada a partir
desta thread. Um gráfico de cena pode ser criado e manipulado em um encadeamento de segundo plano, mas
quando seu nó raiz é anexado a qualquer objeto ativo na cena, esse gráfico de cena deve ser acessado a partir
do encadeamento do aplicativo JavaFX. Isso permite que os desenvolvedores criem gráficos de cena complexos
em um thread de fundo, mantendo as animações em cenas 'ao vivo' suaves e rápidas. O encadeamento do
aplicativo JavaFX é um encadeamento diferente do Swing e do AWT Event Dispatch Thread (EDT), portanto,
deve-se tomar cuidado ao incorporar o código JavaFX nos aplicativos Swing.
ÿ Encadeamento de mídia: este encadeamento é executado em segundo plano e sincroniza os quadros mais
recentes por meio do gráfico de cena usando o encadeamento do aplicativo JavaFX.
Pulso
Um pulso é um evento que indica ao grafo de cena JavaFX que é hora de sincronizar o estado dos
elementos no grafo de cena com o Prism. Um pulso é acelerado a 60 quadros por segundo (fps) no máximo
e é disparado sempre que as animações estão sendo executadas no gráfico de cena. Mesmo quando a animação não
está rodando, um pulso é agendado quando algo no gráfico de cena é alterado. Por exemplo, se a posição de um
botão for alterada, um pulso será agendado.
Quando um pulso é disparado, o estado dos elementos no gráfico de cena é sincronizado com a camada de
renderização. Um pulso permite aos desenvolvedores de aplicativos uma maneira de lidar com eventos de forma
assíncrona. Esse importante recurso permite que o sistema crie lotes e execute eventos no pulso.
Layout e CSS também estão vinculados a eventos de pulso. Várias alterações no gráfico de cena podem levar a
várias atualizações de layout ou CSS, o que pode prejudicar seriamente o desempenho. O sistema executa
automaticamente uma passagem de layout e CSS uma vez por pulso para evitar a degradação do desempenho. Os
desenvolvedores de aplicativos também podem acionar manualmente passes de layout conforme necessário para
fazer medições antes de um pulso.
O Glass Windowing Toolkit é responsável por executar os eventos de pulso. Ele usa os temporizadores nativos de
alta resolução para fazer a execução.
Mídia e Imagens
A funcionalidade de mídia JavaFX está disponível por meio das APIs javafx.scene.media.
O JavaFX suporta mídia visual e de áudio. O suporte é fornecido para arquivos de áudio MP3, AIFF e WAV e arquivos
de vídeo FLV. A funcionalidade de mídia JavaFX é fornecida como três componentes separados: o objeto Media
representa um arquivo de mídia, o MediaPlayer reproduz um arquivo de mídia e um MediaView é um nó que exibe a
mídia.
CSS
O componente Media Engine, mostrado em verde na Figura 2–1, foi projetado tendo em mente o
desempenho e a estabilidade e fornece um comportamento consistente entre as plataformas.
Para obter mais informações, leia o documento Incorporating Media Assets into JavaFX Applications.
Componente da Web O
componente da Web é um controle de interface do usuário JavaFX, baseado no Webkit, que fornece
um visualizador da Web e funcionalidade de navegação completa por meio de sua API. Esse componente
do mecanismo da Web, mostrado em laranja na Figura 2–1, é baseado no WebKit, que é um mecanismo
de navegador da Web de software livre compatível com HTML5, CSS, JavaScript, DOM e SVG. Ele permite
que os desenvolvedores implementem os seguintes recursos em seus aplicativos Java:
ÿ Renderizar conteúdo HTML de URL local ou remoto
encapsula um objeto WebEngine, incorpora conteúdo HTML na cena de um aplicativo e fornece campos
e métodos para aplicar efeitos e transformações. É uma extensão de uma classe Node.
Além disso, as chamadas Java podem ser controladas por meio de JavaScript e vice-versa para permitir
que os desenvolvedores aproveitem ao máximo ambos os ambientes. Para obter uma visão geral mais
detalhada do navegador incorporado JavaFX, consulte o documento Adicionando conteúdo HTML a
aplicativos JavaFX.
CSS
JavaFX Cascading Style Sheets (CSS) fornece a capacidade de aplicar estilo personalizado à interface do
usuário de um aplicativo JavaFX sem alterar nenhum código-fonte desse aplicativo. O CSS pode ser aplicado
a qualquer nó no grafo de cena JavaFX e é aplicado aos nós de forma assíncrona. Os estilos JavaFX CSS
também podem ser facilmente atribuídos à cena em tempo de execução, permitindo que a aparência de um
aplicativo mude dinamicamente.
A Figura 2–2 demonstra a aplicação de dois estilos CSS diferentes ao mesmo conjunto de controles de IU.
Controles de IU
O JavaFX CSS é baseado nas especificações do W3C CSS versão 2.1, com algumas adições do
trabalho atual na versão 3. O suporte e as extensões do JavaFX CSS foram projetados para permitir
que as folhas de estilo JavaFX CSS sejam analisadas de forma limpa por qualquer analisador CSS
compatível, mesmo um que não suporta extensões JavaFX. Isso permite a mistura de estilos CSS para
JavaFX e para outros propósitos (como para páginas HTML) em uma única folha de estilo. Todos os
nomes de propriedade JavaFX são prefixados com uma extensão de fornecedor de “-fx-“, incluindo
aqueles que podem parecer compatíveis com HTML CSS padrão, porque alguns valores JavaFX têm
uma semântica ligeiramente diferente.
Para obter informações mais detalhadas sobre JavaFX CSS, consulte o documento
Skinning JavaFX Applications with CSS.
Controles de IU
Os controles de interface do usuário JavaFX disponíveis por meio da API JavaFX são construídos
usando nós no grafo de cena. Eles podem aproveitar ao máximo os recursos visualmente avançados
da plataforma JavaFX e são portáteis em diferentes plataformas. O JavaFX CSS permite criar temas e
capas para os controles da interface do usuário.
A Figura 2–3 mostra alguns dos controles de IU atualmente suportados. Esses controles residem no
pacote javafx.scene.control.
Disposição
Para obter informações mais detalhadas sobre todos os controles de interface do usuário JavaFX disponíveis,
consulte Usando controles de interface do usuário JavaFX e a documentação da API para o pacote
javafx.scene.control.
Disposição
Contêineres ou painéis de layout podem ser usados para permitir arranjos flexíveis e dinâmicos
dos controles de interface do usuário em um gráfico de cena de um aplicativo JavaFX. A API de layout
JavaFX inclui as seguintes classes de contêiner que automatizam modelos de layout comuns: ÿ A classe
BorderPane apresenta seus nós de conteúdo na parte superior, inferior, direita, esquerda ou
região central.
ÿ A classe HBox organiza seus nós de conteúdo horizontalmente em uma única linha. ÿ A classe
VBox organiza seus nós de conteúdo verticalmente em uma única coluna. ÿ A classe StackPane
coloca seus nós de conteúdo em uma única pilha de trás para a frente. ÿ A classe GridPane permite que
ÿ A classe TilePane coloca seus nós de conteúdo em células de layout de tamanho uniforme ou
azulejos
Para obter uma estrutura de layout desejada, diferentes contêineres podem ser aninhados em um
aplicativo JavaFX.
Para saber mais sobre como trabalhar com layouts, consulte o artigo Trabalhando com layouts no
JavaFX. Para obter mais informações sobre a API de layout JavaFX, consulte a documentação da
API para o pacote javafx.scene.layout.
ÿ cisalhamento – Gire um eixo para que os eixos x e y não sejam mais perpendiculares.
As coordenadas do nó são deslocadas pelos multiplicadores especificados.
Para saber mais sobre como trabalhar com transformações, consulte o documento Aplicando Transformações
no JavaFX. Para obter mais informações sobre as classes de API javafx.scene.transform, consulte a
documentação da API.
Efeitos visuais
O desenvolvimento de interfaces rich client no gráfico de cena JavaFX envolve o uso de efeitos visuais ou
efeitos para aprimorar a aparência dos aplicativos JavaFX em tempo real. Os Efeitos JavaFX são
principalmente baseados em pixels de imagem e, portanto, pegam o conjunto de nós que estão no gráfico
de cena, renderizam-no como uma imagem e aplicam os efeitos especificados a ele.
Alguns dos efeitos visuais disponíveis no JavaFX incluem o uso das seguintes classes: ÿ Drop Shadow –
ÿ Iluminação – Simula uma fonte de luz brilhando em um determinado conteúdo e pode dar a um
objeto plano uma aparência tridimensional mais realista.
Para obter exemplos de como usar alguns dos efeitos visuais disponíveis, consulte o documento
Criando efeitos visuais. Para obter mais informações sobre todas as classes de efeitos visuais
disponíveis, consulte a documentação da API para o pacote javafx.scene.effect.
parte II
Parte IIIntrodução ao JavaFX Sample
Formulários
Esta coleção de aplicativos de exemplo foi projetada para que você comece com tarefas
JavaFX comuns, incluindo trabalhar com layouts, controles, folhas de estilo, FXML e efeitos
visuais.
Olá, mundo, estilo JavaFX Design de formulário em JavaFX Design sofisticado com CSS
3
3
A melhor maneira de ensinar como é criar e construir um aplicativo JavaFX é com um aplicativo
“Hello World”. Um benefício adicional deste tutorial é que ele permite testar se a tecnologia
JavaFX está instalada corretamente.
A ferramenta usada neste tutorial é o NetBeans IDE 7.4. Antes de começar, verifique se a
versão do NetBeans IDE que você está usando suporta JavaFX 8. Consulte a seção
Configurações de sistema certificadas da página de downloads do Java SE 8 para obter detalhes.
@Sobrepor
public void start(Stage primaryStage) { Button btn = new Button();
btn.setText("Diga 'Olá Mundo'"); btn.setOnAction(new
EventHandler<ActionEvent>() {
@Sobrepor
public void handle(ActionEvent event) { System.out.println("Hello
World!");
}
});
Construir o aplicativo
root.getChildren().add(btn);
primaryStage.setTitle("Olá Mundo!");
PrimaryStage.setScene(cena); primaryStage.show();
}
public static void main(String[] args) { launch(args);
}
}
Aqui estão as coisas importantes a saber sobre a estrutura básica de um aplicativo JavaFX: ÿ A
classe principal de um aplicativo JavaFX estende a
ÿ Um aplicativo JavaFX define o contêiner da interface do usuário por meio de um palco e uma cena. A
classe JavaFX Stage é o contêiner JavaFX de nível superior. A classe JavaFX Scene é o contêiner
para todo o conteúdo. O Exemplo 3–1 cria o palco e a cena e torna a cena visível em um determinado
tamanho de pixel.
ÿ No JavaFX, o conteúdo da cena é representado como um gráfico de cena hierárquico de nós. Neste
exemplo, o nó raiz é um objeto StackPane , que é um nó de layout redimensionável. Isso significa que
o tamanho do nó raiz rastreia o tamanho da cena e muda quando o palco é redimensionado por um
usuário.
ÿ O método main() não é necessário para aplicativos JavaFX quando o arquivo JAR para
o aplicativo é criado com a ferramenta JavaFX Packager, que incorpora o JavaFX Launcher no arquivo
JAR. No entanto, é útil incluir o método main() para que você possa executar arquivos JAR que foram
criados sem o JavaFX Launcher, como ao usar um IDE no qual as ferramentas JavaFX não estão
totalmente integradas. Além disso, os aplicativos Swing que incorporam o código JavaFX requerem o
método main() .
A Figura 3–1 mostra o gráfico de cena para o aplicativo Hello World. Para obter mais informações
sobre gráficos de cena, consulte Trabalhando com o JavaFX Scene Graph.
Execute o aplicativo
1. Na janela Projetos, clique com o botão direito do mouse no nó do projeto HelloWorld e escolha Executar.
ÿ Fancy Forms com JavaFX CSS fornece truques de estilo simples para aprimorar seu
aplicativo, incluindo adicionar uma imagem de fundo e estilizar botões e texto.
ÿ Usar FXML para criar uma interface de usuário mostra um método alternativo para criar a interface de usuário de
login. FXML é uma linguagem baseada em XML que fornece a estrutura para construir uma interface de usuário
separada da lógica de aplicação do seu código. ÿ Animação e efeitos visuais em JavaFX mostram como dar vida
a um aplicativo
adicionando animação de linha do tempo e efeitos de mesclagem.
4
4
Criar um formulário é uma atividade comum ao desenvolver um aplicativo. Este tutorial ensina os
fundamentos do layout de tela, como adicionar controles a um painel de layout e como criar eventos
de entrada.
Neste tutorial, você usará o JavaFX para criar o formulário de login mostrado na Figura 4–1.
A ferramenta usada neste tutorial de introdução é o NetBeans IDE. Antes de começar, certifique-se de
que a versão do NetBeans IDE que você está usando suporta JavaFX 8. Consulte a página
Configurações de sistema certificadas da página de downloads do Java SE para obter detalhes.
Criar o Projeto
Sua primeira tarefa é criar um projeto JavaFX no NetBeans IDE e nomeá-lo como Login: 1.
Quando você cria um projeto JavaFX, o NetBeans IDE fornece um aplicativo Hello World
como ponto de partida, que você já viu se seguiu o tutorial Hello World.
4. Remova o método start() gerado pelo NetBeans IDE e substitua-o pelo código do Exemplo 4–1.
primaryStage.show();
}
Dica: Depois de adicionar o código de exemplo em um projeto NetBeans, pressione Ctrl (ou Cmd) + Shift +
I para importar os pacotes necessários. Quando houver opções de instruções de importação, escolha
aquela que começa com javafx.
O código para criar o layout GridPane está no Exemplo 4–2. Adicione o código antes da linha
primaryStage.show();
O exemplo 4–2 cria um objeto GridPane e o atribui à variável chamada grid. A propriedade de alinhamento
altera a posição padrão da grade do canto superior esquerdo da cena para o centro. As propriedades gap
gerenciam o espaçamento entre as linhas e colunas, enquanto a propriedade padding gerencia o espaço
ao redor das bordas do painel de grade. As inserções estão na ordem superior, direita, inferior e esquerda.
Neste exemplo, há 25 pixels de preenchimento em cada lado.
A cena é criada com o painel de grade como o nó raiz, que é uma prática comum ao trabalhar com
contêineres de layout. Assim, conforme a janela é redimensionada, os nós dentro do painel de grade são
redimensionados de acordo com suas restrições de layout. Neste exemplo, o painel de grade permanece
no centro quando você aumenta ou diminui a janela. As propriedades de preenchimento garantem que
haja um preenchimento ao redor do painel de grade quando você diminui a janela.
Esse código define a largura e a altura da cena como 300 por 275. Se você não definir as dimensões
da cena, a cena será padronizada para o tamanho mínimo necessário para exibir seu conteúdo.
A primeira linha cria um objeto Text que não pode ser editado, define o texto como Welcome e o
atribui a uma variável chamada scenetitle. A próxima linha usa o método setFont() para definir a
família da fonte, o peso e o tamanho da variável do título da cena . Usar um estilo embutido é
apropriado quando o estilo está vinculado a uma variável, mas uma técnica melhor para estilizar os
elementos de sua interface de usuário é usar uma folha de estilo. No próximo tutorial, Fancy Forms
with JavaFX CSS, você substituirá o estilo embutido por uma folha de estilo.
As próximas linhas criam um objeto Label com o texto User Name na coluna 0, linha 1 e um objeto
Text Field que pode ser editado. O campo de texto é adicionado ao painel de grade na coluna 1,
linha 1. Um campo de senha e um rótulo são criados e adicionados ao painel de grade de maneira
semelhante.
Ao trabalhar com um painel de grade, você pode exibir as linhas de grade, o que é útil para fins
de depuração. Nesse caso, você pode adicionar grid.setGridLinesVisible(true) após a linha que
adiciona o campo de senha. Em seguida, ao executar o aplicativo, você verá as linhas para as
colunas e linhas da grade, bem como as propriedades do intervalo, conforme mostrado na Figura 4–
2.
A primeira linha cria um botão chamado btn com o rótulo Entrar e a segunda linha cria um painel
de layout HBox chamado hbBtn com espaçamento de 10 pixels. O painel HBox define um alinhamento
para o botão que é diferente do alinhamento aplicado aos outros controles no painel de grade. A
propriedade de alinhamento tem um valor de Pos.BOTTOM_RIGHT, que posiciona um nó na parte
inferior do espaço verticalmente e na borda direita do espaço horizontalmente. O botão é adicionado
como filho do painel HBox e o painel HBox é adicionado à grade na coluna 1, linha 4.
Agora, adicione um controle Text para exibir a mensagem, conforme mostrado no Exemplo 4–5.
Adicione este código antes do código da cena.
A Figura 4–3 mostra o formulário agora. Você não verá a mensagem de texto até trabalhar na
próxima seção do tutorial, Adicionar código para manipular um evento.
Execute o aplicativo
Por fim, faça com que o botão exiba a mensagem de texto quando o usuário o pressionar. Adicione
o código do Exemplo 4–6 antes do código da cena.
@Sobrepor
public void handle(ActionEvent e) {
actiontarget.setFill(Color.FIREBRICK); actiontarget.setText("Botão
de login pressionado");
}
});
Execute o aplicativo
Clique com o botão direito do mouse no nó do projeto Login na janela Projetos, escolha Executar e
clique no botão Entrar. A Figura 4–4 mostra os resultados. Se você tiver problemas, dê uma olhada
no código no arquivo Login.java que está incluído no arquivo Login.zip para download.
fornece dicas sobre como adicionar uma imagem de plano de fundo e alterar radicalmente o
estilo do texto, rótulo e botão no formulário de login.
ÿ Usar FXML para criar uma interface de usuário mostra um método alternativo para criar a
interface de usuário de login. FXML é uma linguagem baseada em XML que fornece a
estrutura para construir uma interface de usuário separada da lógica de aplicação do seu código.
Experimente também as amostras JavaFX, que você pode baixar na seção JDK Demos and
Samples da página Java SE Downloads em http://www.oracle.com/technetwork/java/javase/
downloads/. A amostra do Ensemble contém exemplos de layouts e seu código-fonte.
5
5
Este tutorial é sobre como tornar seu aplicativo JavaFX atraente adicionando uma folha de estilo
em cascata (CSS). Você desenvolve um design, cria um arquivo .css e aplica os novos estilos.
Neste tutorial, você usará um formulário de Login que usa estilos padrão para rótulos, botões e cor
de fundo e, com algumas modificações CSS simples, o transformará em um aplicativo estilizado,
conforme mostrado na Figura 5–1 .
A ferramenta usada neste tutorial de introdução é o NetBeans IDE. Antes de começar, certifique-se de
que a versão do NetBeans IDE que você está usando suporta JavaFX 8. Consulte a página
Configurações de sistema certificadas da página de downloads do Java SE para obter detalhes.
Criar o Projeto
Se você seguiu o guia de Introdução desde o início, já criou o projeto de Login necessário para este
tutorial. Caso contrário, baixe o projeto Login clicando com o botão direito do mouse em Login.zip e
salvando-o em seu sistema de arquivos. Extraia os arquivos do arquivo zip e abra o projeto no
NetBeans IDE.
1. Na janela Projetos do NetBeans IDE, expanda o nó do projeto Login e, em seguida, o nó do diretório Pacotes de
código-fonte .
2. Clique com o botão direito do mouse na pasta de login no diretório Source Packages e escolha New,
depois Outro.
3. Na caixa de diálogo Novo arquivo, escolha Outro, Folha de estilo em cascata e clique em
Próximo.
4. Digite Login para o campo de texto Nome do arquivo e certifique-se de que o valor do campo de texto Pasta seja
src\login.
5. Clique em Concluir.
6. No arquivo Login.java , inicialize a variável de folhas de estilo da classe Scene para apontar para a folha de
estilo em cascata incluindo a linha de código mostrada em negrito abaixo para que apareça conforme
mostrado no Exemplo 5–1.
(Login.class.getResource("Login.css").toExternalForm()); primaryStage.show();
fundo Uma imagem de plano de fundo ajuda a tornar seu formulário mais atraente. Para este tutorial,
você adiciona um plano de fundo cinza com uma textura de linho.
Primeiro, baixe a imagem de plano de fundo clicando com o botão direito do mouse na imagem background.jpg e
salvando-a na pasta src\login no projeto Login NetBeans.
Agora, adicione o código da propriedade background-image ao arquivo CSS. Lembre-se de que o caminho é relativo
à folha de estilo. Portanto, no código do Exemplo 5–2, a imagem background.jpg está no mesmo diretório que o
arquivo Login.css .
A imagem de plano de fundo é aplicada ao estilo .root , o que significa que é aplicada ao nó raiz da ocorrência de
Scene . A definição de estilo consiste no nome da propriedade (-fx-background-image) e no valor da propriedade
(url(“background.jpg”)).
A Figura 5–2 mostra o formulário de login com o novo plano de fundo cinza.
Estilizar as etiquetas
Estilizar as etiquetas
Os próximos controles a serem aprimorados são os rótulos. Você usará a classe de estilo .label , o que
significa que os estilos afetarão todos os rótulos do formulário. O código está no Exemplo 5–3.
.label { -fx-
font-size: 12px; -fx-font-
weight: negrito; -fx-
preenchimento de texto:
#333333; -fx-efeito: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 );
}
Este exemplo aumenta o tamanho e o peso da fonte e aplica uma sombra de cor cinza (#333333). O
objetivo da sombra projetada é adicionar contraste entre o texto cinza escuro e o fundo cinza claro.
Consulte a seção sobre efeitos no JavaFX CSS Reference Guide para obter detalhes sobre os
parâmetros da propriedade de sombreamento.
Texto de estilo
Texto de estilo
Agora, crie alguns efeitos especiais nos dois objetos Text no formulário: scenetitle, que inclui o texto
Welcome, e actiontarget, que é o texto retornado quando o usuário pressiona o botão Sign in. Você pode
aplicar estilos diferentes a objetos de texto usados de diversas maneiras.
1. No arquivo Login.java , remova as seguintes linhas de código que definem os estilos embutidos
atualmente definidos para os objetos de texto:
actiontarget.setFill(Color.FIREBRICK);
Ao mudar para CSS em vez de estilos inline, você separa o design do conteúdo.
Essa abordagem torna mais fácil para um designer ter controle sobre o estilo sem precisar modificar
o conteúdo.
2. Crie um ID para cada nó de texto usando o método setID() da classe Node: Adicione as seguintes
linhas em negrito para que apareçam conforme mostrado no Exemplo 5–4.
Estilizar o botão
O tamanho do texto de boas-vindas é aumentado para 32 pontos e a fonte é alterada para Arial Black.
A cor de preenchimento do texto é definida como cinza escuro (#818181) e um efeito de sombra interna
é aplicado, criando um efeito de relevo. Você pode aplicar uma sombra interna a qualquer cor alterando
a cor de preenchimento do texto para uma versão mais escura do plano de fundo. Consulte a seção
sobre efeitos no JavaFX CSS Reference Guide para obter detalhes sobre os parâmetros da propriedade
de sombra interna.
A Figura 5–4 mostra as alterações de fonte e os efeitos de sombra nos dois objetos Text .
Estilizar o botão
O próximo passo é estilizar o botão, fazendo com que ele mude de estilo quando o usuário passar o
mouse sobre ele. Essa alteração dará aos usuários uma indicação de que o botão é interativo, uma
prática de design padrão.
Primeiro, crie o estilo para o estado inicial do botão adicionando o código do Exemplo 5–
6. Esse código usa o seletor de classe de estilo .button , de modo que, se você adicionar um botão
ao formulário posteriormente, o novo botão também usará esse estilo.
Estilizar o botão
Agora, crie uma aparência ligeiramente diferente para quando o usuário passar o mouse
sobre o botão. Você faz isso com a pseudo-classe hover. Uma pseudoclasse inclui o seletor da
classe e o nome do estado separados por dois pontos (:), conforme mostrado no Exemplo 5–7.
A Figura 5–5 mostra os estados inicial e flutuante do botão com seu novo plano de fundo
cinza-azulado e texto branco em negrito.
seguir: ÿ Veja o que você pode criar usando CSS. Alguns documentos que podem te ajudar são
Skinning JavaFX Applications with CSS, Styling Charts with CSS, and the JavaFX CSS Reference
Guide. A seção Skinning with CSS and the CSS Analyzer do JavaFX Scene Builder User Guide
também fornece informações sobre como você pode usar a ferramenta JavaFX Scene Builder
para aplicar skin ao seu layout JavaFX FXML.
ÿ Consulte Estilizando botões FX com CSS para obter exemplos de como criar estilos de botões
comuns usando CSS.
6
6
Usando FXML para criar uma interface de usuário
Este tutorial mostra os benefícios do uso de JavaFX FXML, que é uma linguagem baseada
em XML que fornece a estrutura para construir uma interface de usuário separada da lógica de
aplicativo de seu código.
Se você iniciou este documento desde o início, viu como criar um aplicativo de login usando apenas
JavaFX. Aqui, você usa FXML para criar a mesma interface de usuário de login, separando o design
do aplicativo da lógica do aplicativo, facilitando assim a manutenção do código. A interface de usuário
de login criada neste tutorial é mostrada na Figura 6–1.
Este tutorial usa o NetBeans IDE. Certifique-se de que a versão do NetBeans IDE que você está
usando suporta JavaFX 8. Consulte a seção Configurações de sistema certificadas da página de
downloads do Java SE para obter detalhes.
Configurar o projeto
Sua primeira tarefa é configurar um projeto JavaFX FXML no NetBeans IDE:
O NetBeans IDE abre um projeto FXML que inclui o código para um aplicativo Hello World
básico. O aplicativo inclui três arquivos: ÿ FXMLExample.java. Este arquivo cuida do código
O primeiro arquivo editado é o arquivo FXMLExample.java . Este arquivo inclui o código para
configurar a classe principal do aplicativo e para definir o palco e a cena. Mais específico para
FXML, o arquivo usa a classe FXMLLoader , que é responsável por carregar o arquivo de origem FXML
e retornar o grafo do objeto resultante.
stage.setTitle("FXML Welcome");
palco.setScene(cena); palco.show();
Uma boa prática é definir a altura e a largura da cena ao criá-la, neste caso 300 por 275; caso contrário,
a cena padroniza para o tamanho mínimo necessário para exibir seu conteúdo.
Assim como em Java, os nomes de classe podem ser totalmente qualificados (incluindo o nome do pacote)
ou podem ser importados usando a instrução import, conforme mostrado no Exemplo 6–2. Se preferir, você
pode usar instruções de importação específicas que se referem a classes.
Remova o layout AnchorPane e seus filhos e substitua-o pelo layout GridPane no Exemplo 6–3.
</GridPane>
Neste aplicativo, o layout GridPane é o elemento raiz do documento FXML e, como tal, possui dois atributos.
O atributo fx:controller é necessário quando você especifica manipuladores de eventos baseados em
controlador em sua marcação. O atributo xmlns:fx é sempre necessário e especifica o namespace fx .
À medida que a janela é redimensionada, os nós no painel de grade são redimensionados de acordo com suas
restrições de layout. Neste exemplo, a grade permanece no centro quando você aumenta ou diminui a janela.
As propriedades de preenchimento garantem que haja um preenchimento ao redor da grade quando você
torna a janela menor.
<Text text="Bem-vindo"
GridPane.columnIndex="0" GridPane.rowIndex="0"
GridPane.columnSpan="2"/>
<TextField
GridPane.columnIndex="1" GridPane.rowIndex="1"/>
<Label text="Senha:"
GridPane.columnIndex="0" GridPane.rowIndex="2"/>
<PasswordField fx:id="passwordField"
GridPane.columnIndex="1" GridPane.rowIndex="2"/>
A primeira linha cria um objeto Text e define seu valor de texto como Welcome.
Os atributos GridPane.columnIndex e GridPane.rowIndex correspondem ao
posicionamento do controle Text na grade. A numeração de linhas e colunas na grade começa em
zero e a localização do controle Text é definida como (0,0), o que significa que está na primeira
coluna da primeira linha. O atributo GridPane.columnSpan é definido como 2, fazendo com que o
título de boas-vindas ocupe duas colunas na grade. Você precisará dessa largura extra
posteriormente no tutorial quando adicionar uma folha de estilo para aumentar o tamanho da fonte do texto para 32 pontos.
As próximas linhas criam um objeto Label com o texto User Name na coluna 0, linha 1 e um
objeto TextField à direita dele na coluna 1, linha 1. Outro objeto Label e PasswordField são
criados e adicionados à grade de maneira semelhante.
Ao trabalhar com um layout de grade, você pode exibir as linhas de grade, o que é útil para fins
de depuração. Nesse caso, defina a propriedade gridLinesVisible como true adicionando a
instrução <gridLinesVisible>true</gridLinesVisible> logo após a instrução <padding></padding> .
Em seguida, ao executar o aplicativo, você verá as linhas para as colunas e linhas da grade,
bem como as propriedades do intervalo, conforme mostrado na Figura 6–2.
<Text fx:id="actiontarget"
GridPane.columnIndex="0" GridPane.columnSpan="2"
GridPane.halignment="RIGHT" GridPane.rowIndex="6"/>
Um painel HBox é necessário para definir um alinhamento para o botão diferente do alinhamento
padrão aplicado aos outros controles no layout GridPane . A propriedade de alinhamento é definida
como bottom_right, que posiciona um nó na parte inferior do espaço verticalmente e na borda direita do
espaço horizontalmente. O painel HBox é adicionado à grade na coluna 1, linha 4.
O painel HBox tem um filho, um Button com a propriedade text definida como Sign in e uma
propriedade onAction definida como handleSubmitButtonAction(). Embora o FXML seja uma maneira
conveniente de definir a estrutura da interface do usuário de um aplicativo, ele não fornece uma maneira
de implementar o comportamento de um aplicativo. Você implementa o comportamento para o método
handleSubmitButtonAction() no código Java na próxima seção deste tutorial, Adicionar código para
manipular um evento.
A atribuição de um valor fx:id a um elemento, conforme mostrado no código do controle Text , cria
uma variável no namespace do documento, à qual você pode fazer referência em qualquer outro local
do código. Embora não seja obrigatório, definir um campo do controlador ajuda a esclarecer como o
controlador e a marcação estão associados.
A anotação @FXML é usada para marcar campos de membro do controlador não público e métodos de
manipulador para uso pela marcação FXML. O método handleSubmtButtonAction define a variável
actiontarget como botão Entrar pressionado quando o usuário pressiona o botão.
Você pode executar o aplicativo agora para ver a interface de usuário completa. A Figura 6–3 mostra os
resultados quando você digita texto nos dois campos e clica no botão Entrar. Se você tiver algum problema,
poderá comparar seu código com o exemplo FXMLLogin.
<?linguagem javascript?>
2. Na marcação Button , altere o nome da função para que a chamada fique da seguinte forma:
onAction="handleSubmitButtonAction(evento);"
function handleSubmitButtonAction()
{ actiontarget.setText("Chamando o JavaScript");
}
</fx:script>
Como alternativa, você pode colocar as funções JavaScript em um arquivo externo (como
fxml_example.js) e incluir o script assim:
<fx:script source="fxml_example.js"/>
Se você estiver pensando em usar uma linguagem de script com FXML, observe que um IDE pode não
suportar a passagem pelo código do script durante a depuração.
a. Na janela Project, clique com o botão direito do mouse na pasta fxmlexample em Source
Pacotes e escolha Novo e, em seguida , Outro.
Copie o conteúdo do arquivo Login.css em seu arquivo CSS. O arquivo Login.css está incluído no arquivo
LoginCSS.zip para download. Para obter uma descrição das classes no arquivo CSS, consulte
Fancy Forms with JavaFX CSS.
2. Faça o download da imagem cinza semelhante a linho para o plano de fundo clicando com o botão
direito do mouse no arquivo background.jpg e salvando-o na pasta fxmlexample .
<folhas de estilo>
</GridPane>
O símbolo @ antes do nome da folha de estilo na URL indica que a folha de estilo está no mesmo
diretório que o arquivo FXML.
4. Para usar o estilo raiz para o painel de grade, adicione uma classe de estilo à marcação para o
Layout GridPane conforme mostrado no Exemplo 6–9.
5. Crie um ID de texto de boas-vindas para o objeto Welcome Text para que ele use o estilo
#welcome-text definido no arquivo CSS, conforme mostrado no Exemplo 6–10.
6. Execute o aplicativo. A Figura 6–5 mostra o aplicativo estilizado. Se você tiver problemas, dê uma
olhada no código que está incluído no arquivo FXMLExample.zip para download
Você também pode experimentar a ferramenta JavaFX Scene Builder abrindo o arquivo fxml_example.fxml
no Scene Builder e fazendo modificações. Esta ferramenta fornece um layout visual
ambiente para projetar a interface do usuário para aplicativos JavaFX e gera automaticamente o
código FXML para o layout. Observe que o arquivo FXML pode ser reformatado quando salvo.
Consulte Getting Started with JavaFX Scene Builder para obter mais informações sobre esta
ferramenta. A seção Skinning with CSS and the CSS Analyzer do JavaFX Scene Builder User
Guide também fornece informações sobre como você pode aplicar skin ao seu layout FXML.
7
7Animação e efeitos visuais em JavaFX
Você pode usar o JavaFX para desenvolver rapidamente aplicativos com experiências de usuário
avançadas. Neste tutorial de introdução, você aprenderá a criar objetos animados e obter efeitos
complexos com muito pouca codificação.
A Figura 7–2 mostra o gráfico de cena para o aplicativo ColorfulCircles. Os nós que ramificam são
instanciações da classe Group, e os nós sem ramificação, também conhecidos como nós folha, são
instanciações das classes Rectangle e Circle.
Configurar o aplicativo
A ferramenta usada neste tutorial de introdução é o NetBeans IDE. Antes de começar, certifique-se
de que a versão do NetBeans IDE que você está usando suporta JavaFX 8. Consulte a seção
Configurações de sistema certificadas da página de downloads do Java SE para obter detalhes.
Você pode gerar as instruções de importação à medida que avança no tutorial usando
o recurso de autocompletar código ou o comando Corrigir importações no menu Código-fonte
no NetBeans IDE. Quando houver opções de instruções de importação, escolha aquela que
começa com javafx.
@Sobrepor
public void start(Stage primaryStage) {
Raiz do grupo = new Group();
Adicionar gráficos
primaryStage.show();
}
}
}
Para o aplicativo ColorfulCircles, é apropriado usar um nó de grupo como nó raiz para a cena. O tamanho
do grupo é determinado pelo tamanho dos nós dentro dele.
Para a maioria dos aplicativos, no entanto, você deseja que os nós rastreiem o tamanho da cena e mudem
quando o palco for redimensionado. Nesse caso, você usa um nó de layout redimensionável como raiz,
conforme descrito em Criando um formulário no JavaFX.
Você pode compilar e executar o aplicativo ColorfulCircles agora e em cada etapa do tutorial para ver os
resultados intermediários. Se você tiver problemas, dê uma olhada no código no arquivo ColorfulCircles.java,
que está incluído no arquivo ColorfulCircles.zip para download. Neste ponto, o aplicativo é uma simples janela
preta.
Adicionar gráficos
Em seguida, crie 30 círculos adicionando o código do Exemplo 7–2 antes da linha
primaryStage.show().
Esse código cria um grupo chamado circles e usa um loop for para adicionar 30 círculos ao grupo. Cada
círculo tem um raio de 150, cor de preenchimento branca e nível de opacidade de 5%, o que significa que é
quase transparente.
Para criar uma borda ao redor dos círculos, o código inclui a classe StrokeType. Um tipo de traçado
FORA significa que o limite do círculo é estendido para fora do interior pelo valor StrokeWidth, que é 4.
A cor do traçado é branca e o nível de opacidade é de 16 por cento, tornando-o mais claro que a cor dos
círculos .
A linha final adiciona o grupo de círculos ao nó raiz. Esta é uma estrutura temporária.
Posteriormente, você modificará esse gráfico de cena para corresponder ao mostrado na Figura 7–2.
A Figura 7–3 mostra o aplicativo. Como o código ainda não especifica um local exclusivo para cada
círculo, os círculos são desenhados uns sobre os outros, com o canto superior esquerdo da janela como
ponto central dos círculos. A opacidade dos círculos sobrepostos interage com o fundo preto, produzindo a
cor cinza dos círculos.
Esse código define o raio do desfoque para 10 pixels de largura por 10 pixels de altura e a
iteração do desfoque para 3, aproximando-o de um desfoque gaussiano. Essa técnica de
desfoque produz um efeito de suavização na borda dos círculos, conforme mostrado na Figura 7–4.
Este código cria um retângulo chamado colors. O retângulo tem a mesma largura e altura da cena e
é preenchido com um gradiente linear que começa no canto inferior esquerdo (0, 1) e termina no canto
superior direito (1, 0). O valor true significa que o gradiente é proporcional ao retângulo e NO_CYCLE
indica que o ciclo de cores não será repetido. A sequência Stop[] indica qual deve ser a cor do gradiente
em um ponto específico.
As próximas duas linhas de código fazem com que o gradiente linear se ajuste à medida que o
tamanho da cena muda, vinculando a largura e a altura do retângulo à largura e altura da cena. Consulte
Usando Propriedades e Vinculações do JavaFX para obter mais informações sobre vinculação.
Os círculos cinzas com bordas borradas agora aparecem no topo de um arco-íris de cores, conforme
mostrado na Figura 7–5.
A Figura 7–6 mostra o gráfico de cena intermediário. Neste ponto, o grupo de círculos e o retângulo de cores
são filhos do nó raiz.
Em seguida, adicione cor aos círculos e escureça a cena adicionando um efeito de mistura de sobreposição.
Você removerá o grupo de círculos e o retângulo de gradiente linear do gráfico de cena e os adicionará ao
novo grupo de mesclagem de sobreposição.
cores.setBlendMode(BlendMode.OVERLAY);
root.getChildren().add(blendModeGroup);
Uma mistura de sobreposição é um efeito comum em aplicativos de design gráfico. Essa mistura
pode escurecer uma imagem ou adicionar destaques ou ambos, dependendo das cores da
mistura. Nesse caso, o retângulo de gradiente linear é usado como sobreposição. O retângulo
preto serve para manter o fundo escuro, enquanto os círculos quase transparentes pegam as
cores do degradê, mas também escurecem.
A Figura 7–7 mostra os resultados. Você verá o efeito completo da mistura de sobreposição ao
animar os círculos na próxima etapa.
Adicionar Animação
A etapa final é usar animações JavaFX para mover os círculos: 1.
A animação é orientada por uma linha do tempo, portanto, esse código cria uma linha do tempo e usa
um loop for para adicionar dois quadros-chave a cada um dos 30 círculos. O primeiro quadro-chave
em 0 segundos usa as propriedades translateXProperty e translateYProperty para definir uma posição
aleatória dos círculos dentro da janela. O segundo quadro-chave em 40 segundos faz o mesmo.
Assim, quando a linha do tempo é reproduzida, ela anima todos os círculos de uma posição aleatória
para outra durante um período de 40 segundos.
Experimente os exemplos do JavaFX, que podem ser baixados da seção JDK Demos and
Samples da página de downloads do Java SE em http://www.oracle.com/technetwork/
java/javase/ Transferências/.
Dê uma olhada especialmente no aplicativo Ensemble, que fornece código de exemplo para
animações e efeitos.
ÿ Leia Criando transições e animação de linha de tempo em JavaFX. Você encontrará mais detalhes
sobre a animação da linha do tempo, bem como informações sobre fade, caminho, paralelo e
transições sequenciais.
ÿ Consulte Criando efeitos visuais em JavaFX para obter formas adicionais de aprimorar a aparência e o
design de seu aplicativo, incluindo reflexos, iluminação e efeitos de sombra.
ÿ Experimente a ferramenta JavaFX Scene Builder para criar aplicativos visualmente interessantes. Essa
ferramenta fornece um ambiente de layout visual para projetar a interface do usuário para aplicativos
JavaFX e gera código FXML. Você pode usar o painel Propriedades ou a opção Modificar da barra
de menus para adicionar efeitos aos elementos da interface do usuário. Consulte as seções Painel de
propriedades e Barra de menus do Guia do usuário JavaFX Scene Builder para obter informações.
A
Abackground.jpg
Este apêndice fornece uma imagem gráfica usada em Usando FXML para criar uma interface de
usuário.
* A redistribuição e uso em fontes e formas binárias, com ou sem * modificação, são permitidos
desde que as seguintes condições
* são atendidas:
*
*
- As redistribuições do código-fonte devem manter o aviso de direitos autorais acima, esta
*
lista de condições e a seguinte isenção de responsabilidade.
*
- As redistribuições em formato binário devem reproduzir o aviso de direitos autorais acima,
*
esta lista de condições e a seguinte isenção de responsabilidade na documentação e/ou
*
outros materiais fornecidos com a distribuição.
* - Nem o nome do Oráculo nem os nomes de seus
*
colaboradores podem ser usados para endossar ou promover produtos derivados deste
*
software sem permissão prévia específica por escrito.
*
* ESTE SOFTWARE É FORNECIDO PELOS DETENTORES DOS DIREITOS AUTORAIS E COLABORADORES
* "COMO ESTÁ" E QUAISQUER GARANTIAS EXPRESSAS OU IMPLÍCITAS, INCLUINDO, MAS NÃO
* LIMITADO ÀS GARANTIAS IMPLÍCITAS DE COMERCIABILIDADE E ADEQUAÇÃO PARA
* UM PROPÓSITO ESPECÍFICO SÃO REJEITADOS. EM NENHUM CASO OS DIREITOS AUTORAIS
* O PROPRIETÁRIO OU OS COLABORADORES SERÃO RESPONSÁVEIS POR QUALQUER COISA DIRETA, INDIRETA, INCIDENTAL,
* DANOS ESPECIAIS, EXEMPLARES OU CONSEQUENTES (INCLUINDO, MAS NÃO
* LIMITADO À AQUISIÇÃO DE BENS OU SERVIÇOS SUBSTITUTOS; PERDA DE USO,
* DADOS OU LUCROS; OU INTERRUPÇÃO DE NEGÓCIOS) DE QUALQUER CAUSA E DE QUALQUER
* TEORIA DA RESPONSABILIDADE, SEJA EM CONTRATO, RESPONSABILIDADE ESTRITA OU ILÍCITO
* (INCLUINDO NEGLIGÊNCIA OU OUTROS) DECORRENTES DE QUALQUER FORMA DO USO
* DESTE SOFTWARE, MESMO SE AVISADO DA POSSIBILIDADE DE TAIS DANOS. */
background.jpg A-1
Machine Translated by Google
plano de fundo.jpg
plano de fundo.jpg