AN style="FONT-FAMILY: Verdana; BACKGROUND: white; COLOR: red; FONT-SIZE: 10pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
PAN>
ng=EN-US>t" class=Corpo align=left>
Para que serve:
O lançamento da JavaFX aconteceu com grande estardalhaço, não deve ter passado despercebido por nenhum desenvolvedor Java. Muitos devem estar se perguntando quais são as capacidades e vantagens da JavaFX, se vale a pena investir no seu aprendizado, se é competitiva com outras plataformas RIA... Procuramos responde a estas perguntas, e também esclarecer e ensinar suas principais novidades conceituais, que representam o grosso da curva de aprendizado.
Em 4 de dezembro de
· Junho de 2005: a Sun adquiriu a SeeBeyond, cujos produtos SOA vieram enriquecer o Glassfish. Mas levou “de brinde” Chris Oliver, que trabalhava num projeto chamado F3;
· Abril de 2006: Ethan Nicholas, também novo na Sun, começou a falar no “Java2 Browser Edition”, proposto para o JDK 7. Era a primeira semente do JDK 6 Update 10 (6u10);
· Novembro de 2006: Chris Oliver anunciou a linguagem F3 (form follows function). Seria uma linguagem para aplicações RIA, facilitando o uso de APIs como a Swing e a Java2D;
· Março de 2007: a Sun adquiriu a Savaje Technologies, criadora da plataforma móvel Savaje, um sistema operacional para smartphones especializado para aplicações Java ME;
· Junho de 2007: na JavaOne, a Sun anunciou uma nova “família” JavaFX, composta pela JavaFX Mobile (baseada no Savaje) e JavaFX Script (novo nome da F3). Apesar dos demos impressionantes, nossa repórter Yara Senger, cobrindo o evento na Edição 47, achou que “A JavaFX Mobile pareceu estar um pouco mais incipiente”;
· Maio de 2008: outra JavaOne (coberta na Edição 59), deu para ver que a JavaFX estava mais incipiente do que se pensava: novamente, só anúncios e demos. Mas os releases foram prometidos para o segundo semestre de 2008 (desktop) e início de 2009 (mobile);
· Outubro de 2008: a Sun lançou o JDK 6u10, tremenda melhoria do JRE para aplicações desktop, applets, RIA, etc. Falei deste release muito antes (Edição 54), por isso perdi um aspecto que só surgiria mais tarde: o 6u10 também seria o runtime da JavaFX, contendo algumas correções, melhorias e otimizações (na AWT e Java2D) específicas para a JavaFX 1.0;
· 4 de Dezembro de 2008: a Sun cumpriu a data prometida, lançando a JavaFX 1.0 (para Windows e MacOSX), entregando também um lote inicial de ferramentas de design (antigo Project Nile) e o primeiro beta da JavaFX Mobile. Simultaneamente, tivemos o release do JDK 6u11, parte de um release sincronizado de segurança, mas com mais fixes para a JavaFX;
· 19 de Dezembro de 2008: JavaFX 1.0 Update 1, com algumas correções em codecs de mídia;
· 2 de Fevereiro de 2009: mais um release do Sun JDK, o 6u12, que se destaca pelo suporte ao novo Java PlugIn e WebStart para browsers de 64 bits, pela correção de problemas antigos da AWT (mistura de componentes heavyweight com lightweight), mais alguns fixes de regressões do 6u10 e melhorias para a JavaFX. E talvez o mais importante: integração da JavaFX. A partir deste release, toda instalação do JRE (seja pelo instalador convencional, seja pelo JavaKernel) fará a instalação do runtime da JavaFX em background.
Para quem chamava a JavaFX de vaporware, basta examinar este histórico – e principalmente, o conteúdo do 1.0 – para ver que não foi bem assim. A Sun realizou um trabalho impressionante em pouco tempo. Mas o trabalho ainda não está completo. Na conferência Devoxx2008[1], uma semana após o lançamento, a Sun revelou mais alguns detalhes para os próximos passos:
· 16 de fevereiro de 2009: será lançada a JavaFX Mobile 1.0, no Mobile World Congress 2008[2] em Barcelona. Ao mesmo tempo, será liberada a JavaFX 1.1 para desktop; esta será apenas uma atualização corretiva. Também não duvido que a Sun aproveite para lançar os portes da JavaFX (pelo menos beta) para Linux e Solaris;
· Março de 2009: Sun JDK 6u13, apenas um SSR (Synchronized Security Release), mas ao contrário do 6u11 será “empurrado” pelo canal de update automático do JRE. Portanto, é agora que as massas receberão os benefícios do 6u12, inclusive a instalação automática do runtime JavaFX – o que elimina o delay do seu download para a primeira applet JavaFX visitada;
· Maio de 2009: Sun JDK 6u14, cujo escopo ainda não está definido, mas será um feature update com vários builds “beta” previstos do início de fevereiro até o final de março. Isso deve incluir, principalmente, a nova arquitetura de ClassLoading paralelo. Mas é certo que haverá mais um lote de refinamentos no suporte à JavaFX e suas dependências (plugin, Java2D, etc.);
· 2 de Junho de 2009: na JavaOne, lançamento da JavaFX 1.5 (com suporte melhorado a streaming, novos componentes, e outras melhorias) e um prerelease da JavaFX 2.0. A Sun também disponibilizará um editor visual para o NetBeans. Estimo a ocasião como data máxima para o lançamento dos portes para Linux e Solaris. Neste mês (ou por volta disso) a Apple também deve lançar o Snow Leopard (MacOSX 10.6), que segundo rumores, terá o JDK 6u12;
· Final de 2009: Release da JavaFX 2.0;
· Início de 2010: Release da JavaFX TV 1.0, que sucede e complementa a JavaTV e outros padrões Java para TV digital (veja o artigo “Conhecendo a TV Digital” na Edição anterior). Também é a época esperada para o Java SE 7; uma das melhorias importantes desta versão é o projeto Jigsaw (modularização do JDK), que deverá beneficiar o tempo de carregamento de aplicações Java em geral e o de aplicações JavaFX em particular. Somente a partir deste período, também imagino o início de discussões de padronização da JavaFX no JCP.
Com tantas versões futuras já planejadas, antes de falar do release 1.0 podemos questionar: este release inicial foi realmente um 1.0? Ou é um beta disfarçado, para a Sun ganhar tempo enquanto continua numa corrida furiosa, com uma seqüência rápida de atualizações tapa-buracos?
Por um lado, minha impressão inicial sobre a JavaFX 1.0 foi muito boa. Fiquei satisfeito com o desempenho, estabilidade, qualidade do SDK (documentação, plugin do NetBeans, exemplos etc.), e com o conjunto geral de funcionalidades.
Por outro lado, há poréns. O suporte multiplataforma ainda é preliminar (embora, no segmento do desktop, a dupla Windows+MacOSX possua o bolo quase inteiro). As ferramentas são OK, para um programador como eu – mas para profissionais de design, ainda deixam a desejar. A JavaFX Mobile, peça importante do quebra-cabeça, ainda está apenas
Não há software completo ou perfeito. Para batizar a versão 1.0 de uma plataforma, além de um nível de qualidade aceitável para produção, o outro critério essencial é a estabilidade. A partir da versão 1.0, não se pode ter alterações incompatíveis. Pode haver melhorias e acréscimos – novas APIs, recursos de runtime (como codecs), otimizações, até sintaxes – como acontece continuamente com a plataforma Java desde o JDK 1.0 em 1996. Quando a Sun lançou a JavaFX 1.0, fez a nós desenvolvedores uma promessa: Podemos começar a trabalhar “a todo vapor”
Enfim... vamos (finalmente!) ao que mais interessa: uma primeira olhada na JavaFX 1.0.
JavaFX Script
A JavaFX Script é uma linguagem de programação Orientada a Objetos; de “família Java” (sintaxe similar na medida do possível, projetada para a JVM e fácil de misturar com Java); estaticamente tipada (não é uma “linguagem dinâmica”!); compilada para bytecode (não intepretada!); com sintaxes de alto nível (como funções de primeira classe).
JavaFX também é parcialmente declarativa, com a idéia de dizer “o que” (ex.: SQL) e não “como” (ex.: Java). Nesse aspecto é híbrida, pois ainda suporta o paradigma imperativo.
Mas chega de definições acadêmicas, vejamos um exemplo na Listagem 1. (Optei por um simples por didática; você encontrará demos mais exuberantes em javafx.com/samples.)
Listagem 1. O demo PhotoFlip (Main.fx)
package fliptransition;
import javafx.animation.*;
import javafx.scene.input.*;
import javafx.scene.*;
import javafx.scene.effect.*;
import javafx.scene.shape.*;
import javafx.scene.paint.*;
import javafx.scene.image.*;
...