Javafx

March 17, 2018 | Author: Andreia Dias | Category: Apache Flex, Java (Programming Language), World Wide Web, Technology, Web Browser


Comments



Description

CENTRO UNIVERSITÁRIO DE MARINGÁCURSO DE PÓS-GRADUAÇÃO EM DESENVOLVIMENTO ORIENTADO A OBJETOS - JAVA Márcio Mitsunori Noda JavaFX: Implementação na Prática MARINGÁ 2009 Márcio Mitsunori Noda JavaFX Monografia apresentada ao Centro Universitário de Maringá como requisito para obtenção do título de especialista em Desenvolvimento Orientado a Objetos JAVA, sob orientação do prof. Munif Gebara Junior. MARINGÁ 2009 AGRADECIMENTOS Aos meus pais por todo incentivo, apoio e confiança. Ao professor Munif Gebara Junior, meu orientador, obrigado por toda sua atenção e dedicação, e principalmente pela motivação que se mostraram indispensáveis a este trabalho. Em especial, ao meu primo Fabrício que colaborou com o papel de leiautista no desenvolvimento deste trabalho. submeter tais implementações em testes de execução sob as plataformas. desenvolvida com a finalidade de implementação de interfaces ricas (RIA – Rich Internet Application). tal como divulgado pelo fornecedor. ainda não consolidada no mercado. browser (navegador). desempenho em produção e complexidade no desenvolvimento de pequenos exemplos práticos sob a plataforma. Por seguinte. no presente trabalho será avaliado os custos em tempo. Palavras-chave: JavaFX. RIA. . trabalho requerido.RESUMO JavaFX sendo uma tecnologia recente. desktop e em dispositivos móveis. ...................................................................... 34 Primeiro Projeto sob os dispositivos HTC .. Figura 4....... 41 .............................. Figura 2.......................................................... 36 Calculadora ........ Figura 6............................................................................................................................................ Figura 5.. 35 Projeto Calculadora nos dispositivos HTC. 39 Projeto Agenda sob os dispositivos HTC . 40 Agenda ............................................................................. Primeiro Projeto....................... Figura 3....................................................................................LISTA DE FIGURAS Figura 1.... ....................... web e RIA............... Tabela 3................ 29 ....................... 16 Comparação dentre desktop.....................LISTA DE TABELAS Tabela 1.......................................................................................... Tabela 4........ Tabela 2................................................................ 19 Recursos de destaque do JavaFX .............. 18 Classificação dos tipos de RIA ................................... Tabela 5.. 26 Formas de implantação ................... Temas RIA...................................................................................... . 34 Classe Java Calculadora ................................................................................................................................ 43 Trecho de código da classe BaseDeDados ........................ Quadro 6........................................... 40 Arquivo ManutencaoContatoView_en_US......... Controle contra travamentos........... 45 ...........................fxproperties........................................... Quadro 7................................... Quadro 9.............................................. 37 Trecho de código da classe Controller ....... Quadro 10.................. Quadro 4............. Quadro 5......... Quadro 3........................................ 32 Código fonte do Primeiro Projeto......... Quadro 8................ 43 Trecho de código da classe RequisicaoServidor ............................................... 38 Conteúdo XML retornado pelo servidor ............................. Quadro 2.... 37 Trecho de código da classe InterfacePadraoView ....... 42 Trecho de código da classe ManutencaoContatoView .....9 LISTA DE QUADROS Quadro 1.. ............................. Persistência de dados .................................................. Internacionalização ........ Revisão Bibliográfica ................................................................................. Desenvolvimento JavaFX ................................... 19 2........4.................................. 10 1...................................................................2..........................................................................................................................................................11............................ 23 2....RIA .... APÊNDICE B – Código fonte da classe InterfacePadraoView .............................. Divisão por Perfis ............ 3 LISTA DE TABELAS .. 33 3...................................10 SUMÁRIO AGRADECIMENTOS ..... 30 3....................................... 13 2............................................ Tecnologias Similares ................................................Código Fonte do primeiro exemplo ........ 72 .... APÊNDICES ............1... 56 7....................................... 20 2............................................ 22 2........................... 13 1...............1 .............................. 41 3.......... JavaFX Script .............. 11 1.. 1 RESUMO ........................................3........................................... APÊNDICE F – Código fonte da classe RequisicaoServidor .2 ................................2........... JavaFX 1................. Integração ...................................................... Implantação .......... CONCLUSÕES e TRABALHOS FUTUROS ............................................ Metodologia .... 4 LISTA DE QUADROS .......... 47 5...................................5.................................................................................................................................................................3.....3.....................................6.............. Lado cliente ......................................................................3. 22 2..1.............................................................................3...............................................8.............................. 25 2.........................................10............................................ 15 2..................................................1............................. Rich Internet Application ...................................................................................................................................2.......... APÊNDICE D – Código fonte da classe ManutencaoContatoView ........................................................... 15 2.........3..........4......................... 58 7....................................3.......................................... 12 1......... 24 2............................................ Projeto Calculadora .......................... Organização do Trabalho...................................6......................................... 2 LISTA DE FIGURAS ............................................................3..................... 32 3...13........... ANEXOS ............................................................... 28 2.............................2............................3................................ Integração com Java ............. Java Sandbox ............................. 70 8....................... 57 7.........1......... 44 4.................. 55 7. 50 6.. Colaboração entre Designers e Desenvolvedores .....9............ JavaFX TV........... APÊNDICE A ............................................ REFERÊNCIAS ............................. Objetivos......12............. BIBLIOGRAFIA CONSULTADA .......................................... JavaFX 1...............................2..................................................................... Lado servidor ..................................................7................ 23 2......... 41 3............................................................... 9 SUMÁRIO ................... 35 3......4.................................... 36 3........ Breve Histórico da Evolução do JavaFX .................... 68 7.......................................................................... Projeto Agenda ........3............5................................................................0 ...... 27 2..................1................................................................. INTRODUÇÃO ....................................................................................................................................................1............................................................................................................................................................................................................................................................................................ 40 3........2........................... APÊNDICE C – Código fonte da classe Controller ....................................... JavaFX Mobile .............. Primeiro Projeto....................... APÊNDICE E – Código fonte da classe BaseDeDados .........................................5............................................................................................. 65 7............................... 21 2............... 61 7... JavaFX 1........... 43 3........................................................................................................... 39 3.............................. semelhante ao Java. INTRODUÇÃO A plataforma JavaFX.. pelo o qual permite que usuários finais possam pela primeira vez efetuar a operação de drag-and-drop (literalmente. . run anywhere" (“escreva uma vez. dispositivos móveis. 2009g). 2009a. 2007a.e. 2007a. Devido ao ambiente de execução bastante diversificado. o acesso antecipado ao produto antes da versão final ser efetivamente disponibilizada ao público geral. 2009b). apoiando todos os conteúdos e aplicações atualmente disponíveis através dos bilhões de dispositivos em uso hoje. oferece conteúdos expressivos para browsers (navegadores). desktops. pode ser considerada uma das plataformas RIA mais amplamente disponível para implantação no mercado. que possui a vantagem de execução sob a JRE (Java Runtime Environment). promete a realização no futuro. Seguindo o mesmo slogan criado pela Sun Microsystem. mesmo que em algumas plataformas liberado no momento apenas como early access. 2009b. execute em qualquer lugar”). "write once. uma nova linguagem de programação simples e intuitiva.11 1. abrangendo todos os grandes principais consumidores e sistemas operacionais corporativos (SUN. foi introduzido o JavaFX Script. resultando em uma rica experiência end-to-end (fim a fim) (SUN. 2007c). unificando o desenvolvimento e implantação de modelos de interfaces mais expressivos. televisores e futuramente para outras plataformas. Em outras palavras possibilita que programas JavaFX que estejam em execução no navegador web como applets. Entre as muitas inovações do JavaFX é a característica denominada Dragto-Install (“soltar para instalar”). i. onde os consumidores poderão acessar o mesmo conteúdo em diversas plataformas que suportem Java (SUN. pelo o qual poderá garantir a segurança e a onipresença da plataforma Java. Como parte desta tecnologia. que poderá englobar desde aplicações embarcadas em automóveis até em sistemas de jogos eletrônicos. arrastar e soltar) para a instalação de aplicações JavaFX. O JavaFX Script é a única tecnologia que oferece uma estreita integração com componentes Java que pode ser executado tanto em servidores como em clientes. recente tecnologia lançada pela Sun Microsystems para o desenvolvimento de interfaces ricas e interativas. ferramentas de runtime para várias arquiteturas de PC (Personal Computer) e outros dispositivos como gráficos. que requer menos codificação. bem como os conceitos envolvidos. desempenhado por designers. e demonstrar parte de suas funcionalidades através de exemplos práticos. 2007a). mídia. e incluem componentes de visualização de dados e aplicações de inteligência de negócios (MAREJKA.12 sejam movidos diretamente para a área de trabalho (desktop). Microsoft WPF/XAML. 2009b). responsáveis pela função artística. tendo como objetivo apresentar uma visão geral. serão demonstrados de maneira superficial. NetBeans e Eclipse (SUN. e nuances da API. 2006). SUN. 2009b. . abordando seus principais aspectos positivos e negativos. Possui plugins para ambos os IDEs (Integrated Development Environment) mais conhecidos. Atualmente o JavaFX ganhou um significante papel no mercado alcançando a marca de mais de 250 milhões de instalações do JRE. Outro ponto de destaque está no conteúdo criativo. 1. dentre outras ferramentas necessárias para a implementação da tecnologia. 2008a). Atualmente pode ser considerado competitivo ou superior as soluções similares presentes no mercado para o desenvolvimento de GUI (Graphic User Interface) tais como o: Macromedia Flash/Flex/Open Laszlo. 2008a). e 400 mil downloads do SDK (Software Development Kit) desde dezembro de 2008 (SUN. AJAX/DHMTL e entre outros (OLIVER. 2007. Os detalhamentos da linguagem JavaFX Script tais como sintaxes. devido ao fácil e rápido processo de construção de interfaces ricas. semântica. Web Services e bibliotecas para construção de interfaces ricas. Objetivos O foco deste trabalho será centrado na tecnologia JavaFX. proporcionado aos usuários a mais simples experiência de instalação de softwares de Internet e conteúdo (SUN. a possibilidade de se tornarem também desenvolvedores Java. Adobe Apollo.1. Mozilla XUL. No seu ambiente de desenvolvimento incluem o compilador. 13 Embora o nome completo da plataforma JavaFX é JavaFX Rich Client. sendo composto ainda por vários outros componentes. o ambiente JavaFX ainda não atingiu o estágio adequado de maturidade (SUN. os principais fundamentos da linguagem JavaFX Script e grande parte de sua estrutura. em função do plugin disponível para o IDE Eclipse ainda não apresentar-se com nível de maturidade adequado. em virtude dos demais sistemas operacionais. Com relação ao conteúdo exposto.2. podendo impactar diretamente no desenvolvimento deste. Metodologia Como critério de desenvolvimento foi adotado a utilização do IDE Netbeans.3. Como restrição de plataforma. serão abordados as revisões bibliográficas baseados somente até o release JavaFX 1. Organização do Trabalho O texto da monografia foi organizado em 4 capítulos: introdução. é o fato do Netbeans ser o IDE oficial para o desenvolvimento na plataforma JavaFX. . no contexto do trabalho o termo será simplificado. revisão bibliográfica. os principais conceitos envolvidos. estando na versão beta no decorrer da implementação dos exemplos. onde serão apresentados o introdução sobre RIA. e possivelmente. 2009). 1. 2009a). implementação e conclusões. No segundo capítulo são abordados a revisão bibliográfica. 1. inviabilizando o acompanhamento desta evolução. o ambiente de execução desktop e web foram delimitados somente ao sistema operacional Windows. visto que novas versões ou revisões poderão ser disponibilizadas no decorrer do trabalho. por seguinte. o histórico de evolução da tecnologia. (WEAVER.2. Outro ponto considerado. bem como. e possuir atualizações com maior frequência. sendo referenciado apenas como JavaFX. 14 O terceiro capítulo trata-se da implementação de exemplos. que serviram de base para a demonstração. formalizando o conteúdo desenvolvido neste trabalho. o acompanhamento e o funcionamento. do desenvolvimento de pequenos aplicativos utilizando a tecnologia JavaFX. . No último capítulo expõe as conclusões obtidas e as propostas para trabalhos futuros. na prática. Entretanto os benefícios foram compensados com uma perca significativa de algumas funcionalidades de UI (User Interface). o armazenamento de dados no lado do cliente. 2007a. no sentido de utilizar as vantagens e superar as desvantagens de ambas as arquiteturas. não se limitando a atualização de várias páginas HTML para completar uma transação (O'ROURKE. Tais recursos de interfaces podem ser exigidos por softwares mais complexos que requerem alta interatividade.RIA. 2004). que podem ser executados via browser sob a máquina virtual Java (JVM .15 2. pode requerer uma grande quantidade de esforço para efetuar tarefas sem maiores complicações de interface (O'ROURKE. e a possibilidade de se invocar a lógica de negócios remotamente (lado do servidor) e a facilidade de se manipular-los. que apesar de iniciar-se de maneira simples. WEAVER. Rich Internet Application . Inclui a requisição/resposta para a página de renderização do modelo. devido a simplicidade na paleta limitada de componentes e em seu modelo de interação restrita. SUN. As primeiras aplicações RIA originaram-se em 1995.1. O princípio básico é proporcionar um tempo de execução eficiente e de alta performance para a execução do código. Outro ponto negativo do HTML é com relação a codificação. tanto no conteúdo quanto na comunicação. O RIA fornece poderosos e extensivos modelos de .RIA O termo ”Rich Internet Application” . de arquitetura simples. 2004. 2009).Java Virtual Machine). fácil manuseio e aprendizado. 2. a necessidade de gerar dinamicamente um grande conteúdo de texto para a simples transmissão de dados. através dos pequenos programas chamados de Java applets. para iniciar a unificação das aplicações do tradicional desktop e web. foi introduzido pela Macromedia por Jeremy Allaire em março de 2002. com algumas restrições de segurança (BOZZON. Revisão Bibliográfica As aplicações baseadas no HTML (Hyper Text Markup Language) tornaramse populares devido ao baixo custo de desenvolvimento. 2006). Apresentação Oferece apresentações aprimoradas de interações com o usuário. responsiva e graficamente rica em interface ao usuário. 2008). Esses modelos baseados em objetos. notificar. . 2008). permitindo-o operar como aplicações em uma única página (LINAJE. Comunicação Permite a comunicação assíncrona. para considerar a capacidade do novo lado do cliente. Temas RIA O RIA utiliza-se de um motor de renderização relativamente robusto no modelo client-side. As principais questões correlacionadas com a concepção do RIA podem ser agrupados em quatro temas conforme a Tabela 1 (LINAJE. ampliam as características dos eventos produzidos tais como podem se originar. detectar. a nova característica de apresentação. A construção de RIAs com metodologias de engenharia da Web requer adaptação do fluxo de desenvolvimento de aplicações Web tradicionais. 2008): Tema Dados Descrição O conteúdo volátil e persistente são armazenados e manipulados no lado do cliente e do servidor (LINAJE. e a comunicações e serviços a nível de sistema (ALLAIRE. Lógica de negócio Em ambos os lados. Podem ainda oferecer uma ampla variedade de controles. Tabela 1. 2004). bem como a distribuição de dados e de funcionalidades entre o cliente e o servidor. 2008). ou ser processado em uma variedade de maneiras (LINAJE. 2002). tanto o cliente quanto o servidor podem realizar operações complexas (LINAJE. bem como os diferentes mecanismos de comunicação entre o servidor e o cliente.16 objetos para interatividade em termos de aplicações e eventos. que podem apresentar-se muito densas. devem se integrar com a interface do usuário. e geralmente podem permitir a construção de gráficos em tempo real através de qualquer SVG (Scalable Vector Graphics) ou algum outro tipo de mecanismo (O'ROURKE. 2008). 2002. A promessa de clientes ricos inclui a capacidade de separar a lógica de apresentação limpa e interfaces de usuário a partir da lógica do aplicativo hospedado na rede. mesmo quando a conexão é perdida. tal recurso possibilita o desenvolvimento de aplicações que podem ser projetadas para trabalhar no modo offline. Clientes ricos devem fornecer um modelo para facilitar o uso de serviços remotos fornecidos por componentes de back-end. possibilitando que servidor possa atualizar o cliente em tempo real. O'ROURKE. ou pelo menos degradar-se normalmente. 2002). também como descritor de leiaute de formulário. recurso necessário para seu funcionamento em dispositivos tais como o PDA (Personal Digital Assistant). O XML (Extensible Markup Language) é geralmente utilizado como o formato de transferência de dados e. 2004) A seguir é apresentada na Tabela 2 que faz uma comparação dentre as características das plataformas desktop. 2004. Em muitos casos. ALLAIRE. web e RIA. permitindo o uso da Internet e serviços de dados fornecidos pelos servidores de aplicação. às vezes. o cliente pode permanecer conectado à fonte de dados. a notificação baseada em comunicações (O'ROURKE. Alem disso. seja hospedado em um servidor de aplicativos ou acessados como XML Web Service ( ALLAIRE.17 Outro benefício do RIA em comparação com o HTML é que os dados podem ser armazenados em cache no cliente. . Muitos aplicativos requerem o suporte para conexões persistentes em dois sentidos. permitindo uma interface mais ágil com menos trafego de informações com o servidor. 2008). Silverlight. OpenLaszlo. Flash. FLEX. Comparação dentre desktop. no contexto geral. As aplicações ricas.18 Característica Cliente universal (Navegador) Instalação no Cliente Capacidade interação de Desktop Não Complexo Rico Sim Sim Não Sim Sim Web Sim Simples Limitado Sim Limitado Sim Não Não RIA Sim Simples Rico Sim Sim Não Sim Sim Lógica de negócio no lado do Servidor Lógica de negócio no lado do Cliente Total atualização de página requerida Comunicação Servidor-Cliente Funcionamento Offline Tabela 2. podem ser classificadas da conforme a Tabela 3: . entre outras novas. web e RIA Dentre as mais conhecidas tecnologias para o desenvolvimento de aplicações ricas para Internet se destacam: AJAX. como o próprio JavaFX que ainda estão emergindo no mercado (LINAJE. 19 Classificação Baseado em script Definição A lógica no lado do cliente é implementada via linguagem de scripts. Também podem ser disponibilizados via programas de uso geral ou arquivos de multimídia. tal como o JavaScript. sendo desenvolvido para a criação de aplicações Web com maior interatividade. o AJAX. porém é executado fora do browser. entre outros (BOZZON. como por exemplo o Java Web Start e o Window Smart Client (BOZZON. cujo as interfaces são baseadas na combinação dentre HTML e CSS (Cascading Style Sheets) (BOZZON.2. 2006). 2006). Flex. com o . como o Flash.XML User Interface Language (BOZZON. Baseado em plugin A renderização avançada e o processamento de eventos são concedidos através de plugins do navegador. Tabela 3. Baseado na linguagem Javascript. isto é. tais como o XUL . FLEX e o Silverlight. a execução de programas de Internet no qual são transferidos para área de trabalho (local). Baseado no navegador A rica interação é nativamente suportado por alguns (browser) navegadores que podem interpretar linguagens de definição de interface declarativa. 2006). Laszlo. por meio de interpretação de dados no formato XML. Tecnologias Similares Como principais concorrentes diretos do JavaFX foram selecionados as seguintes tecnologias já consolidadas no mercado: AJAX (Asynchronous Javascript and XML). Classificação dos tipos de RIA 2. 2006). Tecnologias baseado em web desktop Pode ser definido como as aplicações que podem ser baixadas e executadas diretamente pela web. atua no lado cliente. 20 propósito de se evitar a atualização de páginas HTML. Os dados podem ser recuperados de forma assíncrona utilizando-se do objeto XMLHttpRequest sem a necessidade de se recarregar a interface inteira. Muitos frameworks estão disponíveis para o desenvolvimento com o AJAX, pelo o qual tentam contornar o problema das diferenças dentre os navegadores (LINAJE, 2008); O FLEX, é um produto open source com maturidade comercial para o desenvolvimento de interfaces ricas, fornecido pelo Adobe System, pelo qual se utiliza de duas linguagens: o MXML, com sintaxe declarativa baseado em XML; e o ActionScript, definida como uma linguagem de programação avançada. Com o MXML é possível descrever os comportamentos e leiaute de interface de usuário, e o ActionScript para implementação da lógica no lado do cliente. As principais desvantagens de ambos em Flash e Flex é o suporte limitado para XML e padrões de Web Services e a relativa imaturidade do ambiente como uma ferramenta de desenvolvimento de aplicações. Por outro lado, as principais vantagens é a facilidade com a qual é possível criar-se animações complexas e a disponibilidade de complementos de terceiros. O Flex inclui uma biblioteca de componentes compostos por 100 itens para a construção de interfaces, além de um depurador interativo de aplicativos Flex (ADOBE, 2009; LINAJE, 2008; O'ROURKE, 2004); Por fim, o SilverLight trata-se de uma tecnologia baseado no WPF (Windows Presentation Foundation), sendo uma plataforma da Microsoft para o desenvolvimento RIA. Seguindo o mesmo caminho dos demais concorrentes, o Silverlight possui também uma linguagem declarativa baseada em XML, o XAML (Extensible Application Markup Language), tendo como base do recurso de apresentação do Microsoft .NET Framework 3.0 (infra-estrutura de programação Windows) (LINAJE, 2008; MORONEY, 2007). 2.3. Breve Histórico da Evolução do JavaFX O projeto iniciou-se em setembro de 2005 com a aquisição da empresa SeeBeyond Technology Corporation. A obtenção trouxe para a Sun Microsystems o engenheiro sênior, Christopher Oliver, desenvolvedor do projeto chamado F3 (forms 21 folows function), também conhecido como JFX, no qual mais tarde foi rebatizado como JavaFX Script (OLIVER, 2006, 2007). O JavaFX foi anunciado pela primeira vez em maio de 2007 na conferência JavaOne WorldWide Java Developer. No mesmo período, também foi divulgado a aquisição completa das propriedades intelectuais da empresa Savaje Technologies, que teve como um de seus objetivos, expandirem o mercado de dispositivos móveis integrados com a tecnologia Java como client-side. (SUN, 2007b) A primeira versão do JavaFX, considerada um protótipo, foi disponibilizada ao público como uma linguagem interpretada, permitindo que desenvolvedores, após sua “degustação”, contribuir com feedbacks para a evolução do produto. Dois livros foram publicados no período de 2007, baseados nesta versão (WEAVER, 2009). Em abril de 2008 com o lançamento do JRE 6 Update 10 (6u10), também publicado no artigo por Ethan Nicholas, incluiu componentes e recursos adicionais para o suporte ao runtime do JavaFX, desenvolvido inicialmente voltado para a plataforma Windows 32-bit, sendo considerado um marco para a nova tecnologia, dentre outras inovações. O release trouxe soluções para o JRE no problema de implantação de aplicações desenvolvidas sob o JavaFX, que exigia o runtime específico para sua execução (KRILL, 2008; NICHOLAS, 2008; SUN, 2008b). Por seguinte, em maio de 2008 a Sun Microsystems anunciou o plano de entrega do JavaFX para as plataformas browser e desktop para o terceiro trimestre do mesmo ano, e em sequência para dispositivos móveis no segundo trimestre de 2009. Uma prévia do JavaFX foi liberado em julho de 2008 (SUN, 2009a). 2.4. JavaFX 1.0 Oficialmente o JavaFX foi lançado em 4 de dezembro de 2008, com a liberação da primeira versão, o release 1.0, composto por três componentes chaves: o SDK, a ferramenta JavaFX Production Suite, e o JavaFX Desktop. Inicialmente foi disponibilizado para os sistemas operacionais Windows e MacOSX, compondo uma nova família de produtos baseados na tecnologia Java. (SUN, 2008a, 2009a) O JavaFX 1.0 incluiu no pacote um completo conjunto de efeitos gráficos, aliado ao sofisticado framework de aceleração gráfica via hardware (GPU – Graphic 22 Processor Unit), quando disponível no dispositivo ou na plataforma. Também foi adicionado o suporte para exibição de vídeos através do uso de decodificadores nativos para cada plataforma, o VP6, fornecido pela empresa On2 Technologies, Inc., parceiro da Sun, líder em soluções de compreensão de vídeos (OLIVER, 2009; SUN, 2008a, 2008j). 2.5. JavaFX 1.1 Na sequência, em 12 de fevereiro de 2009, foi oficializado o release do JavaFX 1.1 que anunciou o esperado JavaFX Mobile, pelo o qual forneceu um completo sistema de software para dispositivos móveis via licença OEM (Original Equipment Manufacturer) para fabricantes e outras companhias que desejem aderir a nova plataforma. Incluiu no pacote algumas vantagens, dentre que se destacam, o aumento de performance, a implementação dos tipos numéricos da linguagem Java (float, double, long, int, short, e byte) no JavaFX Script e a compatibilidade binária com o release anterior, o JavaFX 1.0 (O'NEILL, 2007; SUN, 2009a, 2009f). O lançamento contou ainda com adesão de novos parceiros para a nova tecnologia JavaFX, composto por conhecidos fabricantes e prestadores de serviços, como: Sony Ericsson, LG Electronics, Orange, Sprint, Cynergy e MobiTV (SUN, 2009f). 2.6. JavaFX 1.2 No último update, o JavaFX 1.2, lançado em 2 de junho de 2009, entregou significantes atualizações, tais como o suporte como early acess aos sistemas operacionais Linux e OpenSolaris, a adição de novas bibliotecas de interfaces (GUI), o aprimoramento considerável de performance através do runtime Java SE 6 Update 14, dentre outras mudanças que visando maiores melhorias, ocasionaram incompatibilidades de API (Application Programming Interface) com as versões anteriores. Tais alterações de maiores impactos incluíram a remoção/ renomeação de classes e variáveis, antes presentes no SDK 1.1, e a introdução de outras novas na versão corrente, que resultou em binários inconciliáveis dentre o JavaFX 1.1 e Também anunciado na conferência. em junho de 2009. 2009j). 2009b. dispositivos móveis e televisores. Os testes de ambiente realizados pela Sun.23 1. 2009b. desktops.0. O projeto do compilador OpenJFX possui como foco a tradução de scripts JavaFX em arquivos de classes JVM.7. 2009e) O SDK 1. (SUN. 2. 2009a. destacou-se a demonstração prévia da ferramenta JavaFX Authoring Tool. precisam ser recompiladas para migrarem para a versão mais atual (CHO. 2009. bem como suas dependências. todas as bibliotecas codificadas nos releases anteriores. SUN. SUN. 2. compilados como bytecodes (OpenFX.2 ainda foi complementado com o preview do JavaFX TV. JavaFX Mobile Atualmente foi disponibilizado um runtime para o sistema operacional Windows Mobile. 2009b). . como parte do modelo de negócio. forneceu o compilador do JavaFX. a Sun Microsystems alega estar trabalhando com fabricantes de dispositivos. 2009j). 2009l).2 nos dispositivos HTC Diamond e LG Incite touch (SUN. Sendo assim.8. exposto pela primeira vez ao público no evento Java One Conference de 2009. sob a licença GPL (General Public License) 2. fornecido somente para fins de desenvolvimento. Na conferência JavaOne. incluindo parte das bibliotecas de gráficos e ferramentas para o projeto OpenJFX. completando a visão de aplicações JavaFX funcionando em navegadores. A Sun Microsystems demonstrando seu com o comprometimento para o código livre.2. utilizaram o JavaFX SDK 1. 2009a. a Sun demonstrou uma prova de conceito do JavaFX rodando em uma TV de próxima geração da LG Electronics TV. pelo o qual permite que designers e desenvolvedores construam suas aplicações de forma visual (SUN. JavaFX TV Com relação ao runtime do JavaFX TV. tendo a previsão inicial de disponibilizar o JavaFX SDK aos desenvolvedores ao final de 2009. tais como a execução de somente uma aplicação JavaFX por vez. implementação de interfaces. encapsulamento. o JavaFX Script é uma linguagem procedural. o tipo do objeto é conhecido pelo compilador baseado em sua declaração em tempo de compilação (OLIVER. SQL e Lisp. 2007. sendo inclusive dependente de compilação. proporciona uma série de recursos derivados do Java tais como a estruturação do código. tal como as linguagens baseadas de marcação visual. Derivou-se do projeto F3. a linguagem JavaFX Script é statically typed (estaticamente “tipado”). (OLIVER. dentre outros. JavaFX Script O JavaFX Script é uma linguagem de script baseado nas linguagens Javascript. o reuso. O'NEILL. composto por sintaxes e expressões declarativas (relações entre os componentes gráficos interativos). 2009. no qual seu código fonte necessita ser previamente convertido para Java bytecode antes de estar disponível para a execução no sistema. o suporte nativo ao padrão de projeto com o . 2009j). ou seja. orientado a objetos. SUN. que inicialmente não era uma linguagem de programação. SUN. consistindo apenas em declarações de classes e valores de constantes. A plataforma JavaFX foi arquitetada para suportar múltiplas linguagens de script. conceitualmente apresentava-se como um tipo de linguagem de modelagem com notações de objetos UML (Unified Modeling Language). 2009d).24 Na versão corrente ainda possui vários limitadores. integração direta com o mesmo (importação de classes. data-binding (sincronização automática entre os dados da aplicação e os componentes de interfaces exibidos ao usuário) com suporte a gráficos em duas dimensões e a padrões da API de componentes do Swing. Nos conceitos técnicos. 2009. inferência de tipos (baseado no contexto da variável o tipo de dado é auto-interpretado pelo compilador). comportamentos dos controles de UI e gráficos não confiáveis.9. como o XML. Diferentemente dos seus concorrentes do mercado. O'NEILL. 2007. 2007. entre outros). Obtém as vantagens do modelo de programação Java. 2006. criação de objetos. desenvolvida para a especificação de componentes de GUI. Alem disso. Miranda. 2. chamada de métodos. 2006. No entanto na atual versão. relacionado a UI. 2007.25 modelo MVC (Model View Control). 2009d).10.scene. efeitos gráficos. Divisão por Perfis No contexto geral. 2009c. animações e chamada de serviços. que incluem componentes baseados no Swing. vídeos. 2009a. 2009. sendo capaz de suportar interfaces de qualquer tamanho de complexidade (HOMMEL. 2009a. onde um único elemento é denominado como nó. tais como efeitos visuais presentes no pacote javafx. o JavaFX 1. baseado no Java SE (Java 2 Standard Edition). WEAVER. É suportado por todos os dispositivos que executam o JavaFX. O common profile. tais como componentes UI. que define a hierarquia de gráficos em uma cena. ou para vincular a modelos de dados subjacente (SUN. textos. dentre muitas outras características não suportadas em dispositivos embarcados. textos. 2009a. estão disponíveis apenas o perfil comum e desktop (SUN. 2009). PC. desktop (desktop profile) e dispositivo móvel (mobile profile). SUN. é baseado no scene graph (grafo de cena). 2009). dentre outras características que provêm a possibilidade de fácil entendimento e manutenibilidade em grandes programas. PC (incluindo o ambiente web) e dispositivos móveis. o comum (common profile). . O scene graph trata-se de uma estrutura de dados. SUN. a plataforma pode ser dividida em três perfis. 2009a. foram adicionados funcionalidades e vantagens exclusivas da plataforma desktop. Expressa um modelo de interface de fácil manipulação para anexar comportamentos. telefones celulares e dentre outros (MALENKOV. SUN. 2009). 2009. imagens e mídias. No perfil desktop.2. 2009. OLIVER. Contém o núcleo de funcionalidades necessários para os recursos de imagens. 2006. WEAVER. O'NEILL. semelhante a uma arvore. 2.effect. WEAVER. tais como. 2009. WEAVER. O conceito central da linguagem JavaFX. tais como a animação e efeitos de transição. O modelo é também suportado na execução no browser (MALENKOV. 2009a. 2009). é o perfil comum da API no qual incluem classes compartilhadas em ambas as plataformas. Cada nó pode manipular diferentes tipos de objetos (conteúdos). tal como no HTML (BAIR. ou um trecho de código. WEAVER. área. GPS (Global Positioning System). as referências ao perfil mobile é equivalente ao common profile (SUN.chart no perfil comum a todas as plataformas. 2009a. bolha. Contudo. tal como o valor de um atributo é alterado. 2009c). e entre outros itens relacionados aos aparelhos portáveis. 2009). os atributos CSS podem ser especificados. 2009a. WEAVER. no ambiente JavaFX. Métodos assessores (getters e setters) podem ser substituídos através deste recurso. 2009). bem como evidenciando as vantagens da sintaxe declarativa e o uso do encapsulamento (SUN. detectores de movimento. Dentre outras características técnicas de destaque presentes na versão atual (SDK 1. 2009). que incluem recursos tais como o bluetooth. no momento. que é invocado e executado automaticamente em determinadas condições.scene. até essas características serem efetivamente disponibilizadas. é exposto na Tabela 4: Recurso Gerenciamento JavaFX I/O (In/Out) Skinnable (Cascading Sheets) Descrição do Mascaram as diferenças entre o desktop e dispositivos móveis (SUN. Triggers (gatilhos) Conceitualmente pode ser definido como uma funcionalidade. Recursos de destaque do JavaFX . Gráficos Disponível no pacote javafx. Tabela 4. baseado na implementação estendida do JavaME (Java Micro Edition).26 No futuro será criado o mobile profile que poderá ser designado especificamente para dispositivos móveis. Style ultimamente também pela interação visual com o controle. que contém os seguintes tipos de gráficos: barras.2). 2009a. WEAVER. 2009). linha e dispersão (SUN. simplificando a tarefa de desenvolvimento. ou diretamente aplicados nos nós da cena do grafo. 2009a. CSS O Skin recurso responsável por toda aparência visual e. alem de suas habilidades funcionais. Colaboração entre Designers e Desenvolvedores A interação entre os designers. 2009h). 2009h). pelo o qual foi designado e projetado desde o início para suportar o fluxo de trabalho interativo. 2009h). cuja as extensões: FXZ e FXD (JavaFX Data Files) (SUN. os elementos de interface podem ser modificados sem qualquer alteração na lógica de negócio. é o seu apelo estético. camadas. um novo arquivo é criado com a . como parte da plataforma JavaFX. 2009h). e alguns efeitos) dentro do ambiente de desenvolvimento das aplicações JavaFX (SUN. para os formatos próprios do JavaFX. que evidencia a necessidade de uma intensa colaboração entre ambas as partes (SUN. Provê a facilidade aos desenvolvedores/designers para manipular objetos gráficos individuais dentro de um recurso visual. bem como a opção de escolha das ferramentas gráficas de sua preferência. simplificando o processo de importação de objetos gráficos (SUN. 2009h). O JavaFX Production Suite é um produto separado. enquanto manterem os nomes dos objetos gráficos intactos (identificadores). Após realizar o processo de conversão a partir das ferramentas gráficas gerando para o formato reconhecido pelo JavaFX. foi considerado um ponto fundamental.27 2. O ambiente JavaFX cria uma separação entre recursos gráficos e de lógica de negócios. dentre desenvolvedores e artistas. Possui plugins para conversão de gráficos originados do Adobe Illustrator ou Photoshop.11. disponível para download. responsáveis pela beleza da interface e a efetividade da experiência do usuário. e os desenvolvedores que são focados pela funcionalidade da aplicação. Os gráficos exportados a partir da ferramenta JavaFX Production Suite podem ser manipulados como objetos individuais (grupos. Deste modo permite os designers modificarem seus projetos frequentemente. A articulação de uma aplicação RIA de sucesso. possibilita que os objetos gráficos possam ser transferidos para uma nova posição em tela sem causar impactos ao modelo de negócio (SUN. permitindo a substituição de novas versões dos elementos visuais sem nenhuma alteração do código. Devido a esta característica. tais como arquivos de imagens ou fontes TrueType (SUN. 2009). 2009). JavaFX Script e SVG. O recipiente FXZ é um arquivo compactado utilizando-se da compressão do tipo ZIP. 2009h. CHOUDHARY. que deveriam ser compatíveis. que constitui de um mapeamento descritivo. 2009. Em seu conteúdo existe pelo menos um arquivo FXD. porém sua execução é feita através da tecnologia Java Web Start.jar> (CASTILLO. pode incorporar outros recursos gráficos. conforme é exibido na Tabela 5: Plataforma Descrição Execução Padrão Consiste em uma aplicação stand-alone destinado ao perfil (Standard) desktop. 2009). para os grafos de cena do JavaFX API.28 extensão FXZ. um-para-um. 2. Implantação No ambiente de desenvolvimento estão disponíveis quatro formas distintas para a implantação do software. A criação do novo formato FXD. Execução Web Start Também como stand-alone. ou por um editor de texto. caso descompactado manualmente. pelo o qual é a descrição textual do gráfico. Os objetos gráficos podem preservar seus itens originais como camadas e atributos após serem convertidos pelas ferramentas recomendadas (SUN. 2009i). por exemplo: javafx -jar <nome-do-aplicativo. logo seu conteúdo pode ser visualizado por qualquer utilitário ZIP. . Execução no Browser Baseado na execução em applet onde o software é embutido dentro de uma página HTML para ser visualizado pelo browser (CASTILLO. e em adição. pelo o qual possibilita que programas Java possam iniciar diretamente pelo browser. executando fora do escopo do navegador (CASTILLO. também pode ser aberto pelo IDE Netbeans.12. foi motivado devido as dificuldades de representação dos elementos e das características presentes em nos formatos. 2009i). que pode ser inicializado por uma linha de comando. (emulador da plataforma A opção do simulador. e as diferenças dentre os navegadores no contexto de client-side.4) com o surgimento do Java Web Start – e da subjacente JNLP (Java Network Launch Protocol). e em especial. 2009). WEAVER. ferramenta que simula dispositivo no ambiente móvel. possibilitando a instalação de programas applet JavaFX através do recurso de se arrastar a aplicação. mantendo a tecla ALT pressionada. WEAVER. 2009a. . Tabela 5. foi destacada as formas de implantação por meio de applet e Java Web Start. O funcionamento do aplicativo. ocorre mesmo quando o browser estiver fechado (KOSTOVAROV. 2007d). ambos que se utilizam do protocolo JNLP (SUN. O Acesso às extensões JNLP em applets.29 Execução no Executa o aplicativo como MIDlet. 2009). Formas de implantação A partir da plataforma Java 2 (desde da versão 1. está disponível apenas o mobile) sistema operacional Windows (CASTILLO. 2009. Após a aplicação Java Web Start ser baixada e depois do usuário aceitar o certificado de segurança. (ZUKOWSKI. tornaramse uma parte padrão que vieram para solucionar os problemas da arquitetura de segurança. Tais aplicações também podem ser lançadas através do menu Iniciar do SO Windows ou por meio de atalhos criados durante o processo de instalação (KOSTOVAROV. Como ênfase no modo de instalação pela Internet. após sua instalação. 2009). com o mouse. como a ligação para o Java 3D API OpenGL. no momento. Uma aplicação Java Web Start pode ser implantada através de um navegador apenas em sua primeira execução. para fora da janela do navegador. tem sido escrito para aplicações Java Web Start. para o grafo de cena para o runtime do JavaFX (SUN. A implantação via “drag and drog” foi disponibilizado após o release Java 6 Update 10. ele funciona quase como um programa stand-alone. 2009). sob o JavaFX Mobile Mobile Emulator Emulator. 2002). 2009).30 2. através dos avisos de segurança emitidos pelo runtime (KOSTOVAROV. O modelo de segurança sandbox é uma parte intrínseca da arquitetura Java. no qual o JavaFX se beneficia. O sandbox apenas bloqueia a execução dos códigos considerados maliciosos. A estrutura de segurança do sandbox tem como objetivo simplificar o acesso a programas não assinados. Java Sandbox No contexto geral. que podem partir de quaisquer fontes. possuem diferenças mínimas entre ambos. Um dos conceitos fundamentais de segurança no Java é a Sandbox Java. O modelo de segurança Java é focado em proteger os usuários de programas hostis que podem ser baixados a partir de fontes não confiáveis na rede. o usuário pode explicitamente permitir o acesso deste. oriundos de software não assinado.13. Assim. 2009). Para os aplicativos implantados pela web. sob os programas Java de procedências duvidosas que são executados no ambiente (KOSTOVAROV. Outros novos limites foram incluídos a partir do release Java 6 Update 10 (KOSTOVAROV. a JVM proíbe muitas atividades consideradas de risco a segurança do sistema. no caso via applets ou Java Web Start. assinando-o digitalmente. evitando possíveis danos que poderiam ser causados. 2009). tal como sua tradução literal. sendo esta uma das vantagens de segurança oriundos do Java. 2009). assinado. em termos de segurança. Para atingir esta meta. 2009). fazendo parte como um elemento do Java Runtime Environment e da API (KOSTOVAROV. o sistema de segurança não restringe completamente os aplicativos não confiáveis. principalmente na forma como podem ser instalados no lado cliente (KOSTOVAROV. a implantação via Internet. Por outro lado. A assinatura é o meio legal para assegurar a execução do aplicativo no caso do mesmo possuir rotinas não permitidas. ou seja. utilizando-se dos mecanismos de applet ou Java Web Start. assim. caso o programa que tenta efetuar atividades consideradas nocivas seja devidamente certificado. são concedidos os privilégios de segurança para exercer funcionalidades antes . o runtime fornece uma proteção como uma “caixa de areia". Para a plataforma móvel. necessita do uso chaves públicas e privadas para verificação da autenticidade do certificado de validade (SUN. uma versão futura do JavaFX Mobile deverá apoiar a política de segurança em camadas. 2009). A assinatura é uma maneira de verificar se o programa possui origens de uma fonte reconhecida.31 indisponíveis. em cima do Java ME (MSA . e pode ser confiável para execução com as permissões concedidas no arquivo de diretiva (AUSTIN. O processo. Um arquivo de política pode ser definido para exigir uma assinatura em todos os applets ou aplicações que tentam executar o arquivo de política. 1999).Mobile Service Architecture) no modelo de segurança (KOSTOVAROV. resumidamente. 2009o). . O Quadro 1 demonstra o comparador introduzido nos projetos para contornar o escopo de código JavaFX Script. animações.. Os programas foram implantados e testados nos ambientes: desktop. Controle contra travamentos. if ("{__PROFILE__}" != "mobile"){ . tais como rótulos. .código não suportado atualmente no JavaFX Mobile… } . não foram utilizadas nenhuma das bibliotecas de terceiros atualmente disponíveis nas implementações. dentre outros . Embora a parte estética da GUI.. ambos com poder de hardware acima dos requisitos mínimos necessários (SUN.32 3.. botões e dentre outros componentes atualmente disponíveis.. recursos não suportados no JavaFX Mobile. tal como travamento do runtime do JavaFX.sejam importantes características do RIA. mobile (simulador). Quadro 1. que causaram bugs em tempo de execução: . através da implementação de simples exemplos. foi necessário incluir um controle para deixar de realizar algumas funcionalidades quando o ambiente de execução for o móvel. web.. Buscando o teste de execução nas plataformas propostas. campos de textos. Na prática foram submetidos aos dispositivos HTC modelos P4351 e Diamond. portando o sistema operacional Windows Mobile. desktop. Tal fato é justificado devido a possibilidade de tais frameworks possuírem como dependência. tais propriedades foram omitidas para garantir a execução dos exemplos nos ambientes propostos. no presente trabalho. Em virtude de erros ocorridos nos testes feitos nos aparelhos HTC. são apresentados análises no desenvolvimento na prática.. Os tópicos abordados limitam-se aos controles comuns destinados a construção de interfaces comerciais. móvel e web. recursos como efeitos. DESENVOLVIMENTO JAVAFX Com o intuito de explorar o desenvolvimento de aplicativos sob a plataforma JavaFX. 2009l). transformações de objetos. contendo somente dois componentes: um rótulo e um botão.BOLD.layoutBounds. Neste exemplo é ilustrado uma prévia do forte relacionamento com a linguagem Java.width) /2 content: [Text { font: Font. representado pela a classe java.1. No evento do clique do botão é exibida uma caixa de dialogo com mensagem “Alô Mundo!”. sendo desenvolvido sob o perfil comum do JavaFX. 20) content: "JavaFX" } Button { text: "Botão" action: function () { if ("{__PROFILE__}" != "mobile"){ var dataAtual = new Date().AQUAMARINE width: 250 height: 250 var vbox: VBox content: [ vbox = VBox { spacing: 20 nodeHPos: HPos. web ou dispositivos móveis. conforme é apresentado no Quadro 2. "Alô Mundo! {dataAtual}"). … importação de bibliotecas omitidas Stage { title: "Primeiro Projeto" var cena: Scene = Scene { fill: Color. A aplicação consiste em uma janela. O código completo pode ser visto no (APÊNDICE A). Alert.vbox.util. Primeiro Projeto Como primeiro exemplo.33 3. o objetivo inicial foi a simplicidade do código. demonstrando uma das técnicas de leiaute aliado ao recuso de bind. concatenado com o extenso da data atual. afim de permitir sua execução nos ambientes desktop.width .inform("Informação".Date instanciada dentro do código JavaFX Script. ambos com alinhamento centralizado tendo como referência a largura da tela. FontWeight.CENTER layoutX: bind (cena. o “Alô Mundo!”. } } } ] } ] } .font("Arial". através da utilização do objeto Java. Na Figura 1 é apresentada o conteúdo em tela executado na plataforma desktop. executado no simulador. o caractere “ã” não foi reconhecido. Primeiro Projeto Na plataforma móvel. Figura 1. um defeito relacionado a acentuação foi identificado. porém incorporado ao navegador.34 scene : cena } Quadro 2. Código fonte do Primeiro Projeto Neste exemplo não foi utilizado o recurso de formatação de data. No ambiente mobile a formatação não é suportada. que demonstrava a execução de sua aplicação em plataformas distintas (DOEDERLEIN. tal como pode ser observado na Figura 1. mês e ano). 2009b). O mesmo resultado é obtido quando submetido como applet. tal como a utilização da máscara “DD/MM/YYYY” (dia. . visando à portabilidade entre as plataformas. O mesmo problema foi observado no artigo de Osvaldo Pinali DOEDERLEIN. No rótulo “botão”. O fato sugeriu indícios de tratar-se de apenas um possível bug isolado relacionado ao simulador. O resultado foi negativo devido a geração inadequada dos identificadores de objetos agrupados. bem como apresentação os resultados obtidos após o cálculo. Neste exemplo foi elaborado um projeto de uma calculadora simplificada que contém somente os operadores básicos aritméticos. multiplicação e divisão.2. ou seja. Primeiro Projeto sob os dispositivos HTC Projeto Calculadora 3. por seguinte. foi incluído um teclado numérico com seus respectivos operadores. o problema não ocorreu. utilizando-se do software Corel Draw para exportação da interface no formato SVG. apenas possui as operações de soma. subtração. A interface foi desenvolvida sob o padrão de projeto MVC com o propósito inicial de demonstrar a interação entre desenvolvedores e artistas gráficos.35 Ainda sobre o erro de caracteres acentuados. após a importação e conversão para o formato FXZ com o aplicativo . O escopo do programa é composto por um campo de texto para exibição dos números digitados. O resultado deste teste pode ser visto na Figura 2: Figura 2. o exemplo ao ser implantado e testado em um dispositivo real. composto por um conjunto de botões da palheta de componentes do perfil comum. felizmente. A interface do programa pode ser vista na Figura 3 que demonstra a execução nos dispositivos HTC. não foi possível seguir adiante. os principais métodos foram separados em um outro projeto e implementados em uma classe Java. 3. como o Adobe Illustrator ou Photoshop. Projeto Calculadora nos dispositivos HTC Integração com Java Visando a integração direta com o Java. Figura 3.1. para relacionar os operadores nas comparações. . A classe.2. devido à falta de conhecimento nas ferramentas gráficas indicadas. implementou a lógica dos operadores. nomeada como “Calculadora” (APÊNDICE B). Porém visualmente. não causaram problemas de performance no programa. mesmo nos dispositivos móveis. “SUBTRACAO”. Também neste projeto Java foi incluído um tipo enumerado chamado de “Operação”. representando o modelo de negócio. foram identificados certos abusos com relação a instanciação de muitos objetos com finalidade de tratamento dos eventos de teclado. possuindo os tipos “SOMA”. “MULTIPLICACAO” e “DIVISAO”. Avaliando o código fonte analisando-se o desempenho. Assim.36 “SVG to JavaFX Graphics Converter”. "9". Double y) { return x * y. Double y) { return x . o Vbox. def numerosDe1a9 = ["7". } } Quadro 3. public class Calculadora { public Double soma(Double x. "4". "8". Classe Java Calculadora Como complemento. . } public Double subtrai(Double x. HBox { content: [ VBox { content: [ Tile { columns: 3 rows: 3 tileHeight: tamanhoBotao tileWidth: tamanhoBotao vgap: 1 hgap: 1 content: [ for (numero in numerosDe1a9) { Button { text: numero id: "id{numero}" onMouseClicked: controller. a classe “InterfacePadraoView” implementa a interface padrão do aplicativo. }} ]} . "1". "5".. } public Double multiplica(Double x. tal como pode ser observado no Quadro 4.. Hbox e Tile para alinhamento e posicionamento dos botões na forma de um teclado numérico. Double y) { return x + y.y.. ilustrando a utilização de parte dos gerenciadores de leiaute atualmente disponíveis.. "3"].onMouseClickedBotaoNumerico onKeyPressed: controller.37 No Quadro 3 é exibida a classe Java “Calculadora” pelo o qual implementa os métodos aritméticos: package calculadora.onKeyPressedCalculadora. "6". "2". Double y) { return x / y. Trecho de código da classe InterfacePadraoView . Quadro 4. } public Double divide(Double x.. . A propriedade privada “calculadora”. op2). equivalente ao conceito de atributo na linguagem Java. sendo inclusive disponível dentro do ambiente mobile.divide(op1.subtrai(op1. conforme pode ser observado no trecho de código do Quadro 5.SOMA) { calculadora. .MULTIPLICACAO) { calculadora.soma(op1. a manipulação dos tipos enumerados dentro do código. na classe “Controller” (APÊNDICE C) foram adicionados referências para exemplificar este recurso. tal como a interface Map e o HashMap.. Trecho de código da classe Controller Outro ponto de destaque é a possibilidade do uso da API de Collections do Java..multiplica(op1. op2).. demonstra a utilização da instância da classe Java “Calculadora”. } else if (operador == Operacao.SUBTRACAO) { calculadora. . O resultado em tela obtida no ambiente desktop é apresentado na Figura 4: .. } else if (operador == Operacao...38 Com relação ao uso de objetos Java no contexto da linguagem JavaFX.DIVISAO) { calculadora. } else { 0 } } . bem como. public function calcula(): Double { return if (operador == Operacao. var calculadora: Calculadora. op2). } else if (operador == Operacao. Enquanto a função pública “calcula()” exibe o relacionamento dentre objetos Java e JavaFX. Quadro 5. op2). 2009b). no exemplo codificado neste trabalho. Em resumo. No ambiente mobile. contendo os recursos de persistência de dados e a exibição dos resultados na forma de gráficos (DOEDERLEIN. foram incluídos todos os itens ilustrados por DOEDERLEIN. Neste. que apresentou uma implementação de um CRUD (Create. nos dispositivos reais. o conteúdo da aplicação é de uma agenda. consistindo em um simples cadastro de contatos. como um cadastro de produtos. o software proposto é composto por dois módulos. read. como a integração com servidor remoto e o uso de internacionalização (DOEDERLEIN. e a introdução de outros novos recursos. a interface obtida é apresentada na Figura 5: . update and delete). formando uma arquitetura cliente-servidor. Calculadora Projeto Agenda O projeto foi baseado no aplicativo MVC demonstrado no artigo por Osvaldo Pinali DOEDERLEIN. 2009b). enquanto o servidor com a linguagem Java. Contudo. com exceção do gráfico de barras. O cliente foi desenvolvido na plataforma JavaFX. 3.3. com seus respectivos nome e telefone.39 Figura 4. O aplicativo somente poderia possuir os devidos privilégios de execução a menos que fosse assinado digitalmente. O resultado é apresentado no Quadro 6: <?xml version="1. simulando um serviço RESTFUL. Conteúdo XML retornado pelo servidor .http. o serviço remoto é invocado na inicialização do programa somente quando a lista de contatos estiver vazia.io.3. Lado servidor O servidor trata-se de uma aplicação web que tem como objetivo produzir um conteúdo no formato XML. o projeto deste exemplo não pode ser executado no ambiente web. 3. Neste contexto.1.HttpRequest. devido ao uso de código considerado não confiável com a classe javafx.40 Figura 5. Projeto Agenda sob os dispositivos HTC Infelizmente em razões de restrições de segurança derivados do sandbox. gerando um conjunto de quatro registros fixos com números de DDD e telefones aleatórios.0" encoding="UTF-8"?> <contatos> <contato id="1261416750441" nome="Márcio" ddd="87" telefone="99065210"/> <contato id="1261416750456" nome="Contato 1" ddd="31" telefone="99045847"/> <contato id="1261416750490" nome="Contato 2" ddd="97" telefone="99088568"/> <contato id="1261416750500" nome="Contato 3" ddd="35" telefone="99058658"/> </contatos> Quadro 6. tanto como applet ou webstart. uma para listagem dos contatos já cadastrados. cancelar e excluir. Deste modo foram construídas duas . para manter apenas uma instância para cada objeto da view. DDD e telefone. inexistente no perfil móvel.3. 3. além de um componente de listagem. e outra para manutenção e inserção de novos registros. seguido no canto inferior os botões: salvar. contém no rodapé com três outros botões: incluir. A alteração na classe “Controller”. ou seja. O conteúdo de interface pode ser visualizado na Figura 6 no perfil desktop: Figura 6. na interação entre as duas interfaces.OutOfMemoryError. Na primeira tela. Internacionalização Agenda A aplicação necessitou ser dividida em dois projetos.lang. ocorreu o erro java. alterar e excluir. O problema decorreu devido a alocação de memória para cada troca de tela. No formulário de edição (manutenção) possuem os campos de nome.41 3. Nos testes preliminares foram constatadas que após algumas interações de telas no simulador da plataforma móvel. visando a apresentação do recurso de internacionalização.3. evidenciando a falta de memória para a criação de novos objetos.3.2. em razão da compatibilidade com a plataforma mobile. Lado cliente A interface do cliente é basicamente composta pela interação de duas telas. solucionou o erro. fxproperties Os literais que servem como chave ao mapeamento.fxproperties. O conteúdo do arquivo fxproperties demonstra o mapeamento realizado. são referenciados dentro do código JavaFX recebendo uma sintaxe especial. uma com o uso da internacionalização e outra não. A título de exemplo. o recipiente destinado para a linguagem inglês e país Estados Unidos. de internacionalização quanto de localização. sendo necessário duplicar-las em cada projeto. separados pelo carácter “_”. Arquivo ManutencaoContatoView_en_US. visível ao usuário. O formato do nome do arquivo deve obedecer a uma regra: nome da classe somado a língua seguido do país. A internacionalização é o processo de extração literal. foi nomeado como “ManutencaoContatoView_en_US. de formas simples para o uso (WEAVER. que deve ser associado a sua respectiva classe. Deste modo.fxproperties”. seguindo o formato ##[<chave>]. conforme pode ser observado no Quadro 7 : "Manutenção contato" = "Maintaining contact" "Nome" = "Name" "Telefone" = "Phone" "Salvar" = "Save" "Cancelar" = "Cancel" "Excluir" = "Delete" "Cancelar Operação" = "Do you really want to cancel the operation?" Quadro 7. conforme apresentado no trecho de código extraído da classe “ManutencaoContatoView” (APÊNDICE D) no Quadro 8: .42 aplicações idênticas. 2009). Infelizmente devido a bugs encontrados no IDE Netbeans. O JavaFX possui ambos os mecanismos. para ser traduzido para outras línguas e culturas. no JavaFX o mapeamento é feito através de um arquivo de internacionalização com a extensão . a partir de um programa escrito em uma língua ou cultura. não foi possível compartilhar as classes utilizadas em comum a ambos os projetos. no caso da classe ManutencaoContatoView. A localização é o processo se de traduzir um programa internacionalizado em um ou em vários idiomas específicos ou culturas. Trecho de código da classe BaseDeDados . Trecho de código da classe ManutencaoContatoView 3.printStackTrace()... try { def qtdeRegistros: Integer = dis. .. Quadro 9. Persistência de dados A persistência dos dados foi obtida através da classe javafx. 2009k).close(). action: function () { if (Alert.resource. } } } . permitindo a execução do aplicativo mesmo quando submetidos em ambientes considerados como programas não confiáveis.readInt().qtdeRegistros]) { Contato { id: dis. com o acesso exclusivo. } catch (ex: IOException) { ex.question("Aviso". Com o uso desta API.3. que demonstra a o carregamento em memória na forma de uma sequência. cada aplicação possui separadamente seu espaço compartilhado.readInt() } } is..io. Os dados podem permanecem armazenados até que sejam explicitamente excluídos ou quando a aplicação é desinstalada (SUN. contatos = for (i in [1. os registro previamente persistidos em disco. storage = Storage {source: source}.Storage. def dis = new DataInputStream(is).4...43 .. Quadro 8. O Quadro 9 apresenta uma partição da classe “BaseDeDados” (APÊNDICE E)..openInputStream().readInt() telefone: dis.. var contatos: Contato[].readLong() nome: dis. ##[Cancelar Operação]"Deseja realmente cancelar a operação?")) { controller. Button { text: ##[Cancelar]"Cancelar" layoutInfo: LayoutInfo {width: larguraBotao}.readUTF() ddd: dis. }.moveTelaLista(). def is = storage. .data..getAttributeValue("telefone")) } agendaDao. Integração A integração com o servidor remoto foi realizada basicamente por meio da chamada do serviço e consumo do conteúdo XML retornado.PullParser. } } } . HttpRequest { location: urlServidor onInput: function (inputStream: InputStream) { var contato: Contato.parseLong(e.parseInt(e. e decodificar e persistir os dados recebidos pelo servidor. 2009m). que fornece uma sequência de eventos para o processamento do documento sob o controle do aplicativo. A classe javafx. tal como pode ser observado no trecho de código do Quadro 10 : .44 3.XML onEvent: function (e: Event) { if ( e.HttpRequest é a API responsável pela requisição HTTP (Hyper Text Transfer Protocol) assíncrona.START_ELEMENT and e.http. 2009n).pull.getAttributeValue("ddd")) telefone: Integer.qname.getAttributeValue("id")) nome: e. com o objetivo de ilustrar o uso hipotético de um Web Service RESTful.getAttributeValue("nome") ddd: Integer. Atualmente possui o suporte para os formatos XML e a JSON (JavaScript Object Notation) (SUN.name == "contato") { contato = Contato { id: Long. try { var parser: PullParser = PullParser { input: inputStream documentType: PullParser. a classe “RequisicaoServidor” (APÊNDICE F) foi implementada utilizando as APIs anteriormente citadas.5.salvarOuAtualizaContato(contato). utilizada também para a invocação de Web Services RESTful (SUN.type == PullParser. Para a interpretação das informações recebidas foi utilizado um analisador de dados estruturados (parser) proveniente da classe javafx. Por fim.parseInt(e. com a finalidade de realizar uma solicitação remota.io.3. o recurso de integração funcionou no ambiente real. Quadro 10. quando executado no simulador padrão da plataforma móvel. Logo. No decorrer dos testes. na interação dentre as telas de listagem e manutenção dos registros. sendo assim. cuja resolução é muito maior. Como citado inicialmente. garantindo assim. derivadas da classe javafx. Neste exemplo. informativas ou exclamativas. por questões de simplicidade.2b31\work\0\appdb\filesystem\root1\javafxStore\muffin.45 . que causava instabilidades no processo de carregar ou descarregar os dados. Trecho de código da classe RequisicaoServidor Nos testes realizados nos dispositivos móveis. somente finalizando manualmente o processo do JVM foi possível restaurar-lo. o caminho foi localizado no C:\Users\<<nome do usuário>>\javafx-sdk\1. a altura da interface necessitou ser readequada após ser testado no HTC P4351. o programa apresentou alguns problemas com a persistência de informações.Alert. a tela ocupou somente uma pequena parte do espaço disponível em tela. maior performance.. no caso do exemplo da Agenda. Como o problema persistiu em ambos os dispositivos . o tempo de resposta foi bem menor. A solução adotada foi excluir manualmente o arquivo de persistência. travando inclusive o runtime e o JVM do JavaFX. No HTC Diamond. pelo o qual possui o tamanho de tela inferior ao do simulador.stage. no ambiente Windows Mobile. Tais problemas causaram um erro crítico na aplicação. foi constatado um problema de desempenho no HTC P4351. Já no HTC Diamond. ocorreram problemas em tempo de execução relacionadas as mensagens de alertas. Em resumo. tanto na leitura quanto na escrita dos dados. pelo o qual possui praticamente o dobro de recursos computacionais em comparação ao modelo P4351. Os registros foram devidamente importados e persistidos após executar o download do conteúdo XML. disponibilizado em servidor na Internet. O defeito encontrado indicou o corrompimento do arquivo que armazenava as informações. o redimensionamento automático das telas não foi implementado.. ainda não catalogado formalmente.46 HTC testados. . tal fato sinalizou um possível bug. o IDE Netbeans.7. O trabalho se concentrou na visão geral até a versão JavaFX 1. no entanto. logo. foram confirmadas muitas semelhanças com a linguagem Java. ambas as versões. não foram catalogados todos os problemas encontrados. Em virtude do IDE Netbeans versão 6. pelo o qual foi lançado após o término da revisão bibliográfica. 6. Tal fato é justificado devido as vantagens presentes na nova versão. dentre outros bugs.8. tipos de dados.2. a complementação do código. que . A escassez de trabalhos científicos relacionados ao tema. apresentou-se ainda pouco maturo.1 e 6. o último release disponível.8. evidenciou a necessidade de uma ênfase maior no contexto teórico. o conteúdo ainda apresentou-se muito disperso. triggers e sintaxes baseadas no SQL.2. e erros de compilação.1. instabilidades no IDE.7.1. Além disso. como classes. houveram certas dificuldades correlacionadas a obtenção dos materiais e artigos. o uso de sintaxes declarativas demonstrou que realmente podem promover agilidade no desenvolvimento de interfaces ricas. apresentando algumas falhas de recursos básicos do editor. tomando grande parte dos esforços aplicados nesta pesquisa. No contexto do trabalho. Com relação ao ambiente de desenvolvimento. dentre outras tendo em especial . através dos recursos de bind. foram utilizadas em conjunto para contemplar a implementação dos projetos. e dentre outras melhorias que facilitaram no desenvolvimento dos exemplos. apresentar instabilidades em comparação a sua versão anterior. como defeitos no reconhecimento de classes de bibliotecas de terceiros (por exemplo o JFXtras). a 6. tendo como destaque o visualizador prévio da interface a ser gerada. sintaxe em geral.47 4. Outro ponto de destaque é o reconhecimento do considerável potencial da linguagem. CONCLUSÕES E TRABALHOS FUTUROS Sendo um dos primeiros trabalhos focados na nova tecnologia JavaFX. embora muitos destes estejam disponíveis como textos oficiais fornecidos pelo fabricante. excluindo a versão 1. Do ponto de vista técnico. adotado como a ferramenta para a implementação dos exemplos abordados.a capacidade de integração com a mesma. podendo abdicar de algumas das facilidades da linguagem declarativa.48 utilizadas adequadamente. mesmo para o controle de simples formulários. as formas disponível para implantação de aplicativos na Internet. nos perfis desktop e web. em primeiro momento. A versão atual JavaFX 1. O uso do JavaFX. Quanto a API. por ausência de alguns recursos chaves tais como: completos componentes de controle. ou na linguagem JavaFX Script. e a interação dentre desenvolvedores e artistas através do uso de plugins para ferramentas gráficas.2. o sandbox pode ser citado como um dos pontos fundamentais para a implantação remota de aplicações. como retratado por DODERLEIN. Os gerenciadores de leiautes atualmente disponíveis. ambiente de . para as plataformas desktop e mobile. Pode ser evidente o risco de novas atualizações que promovam alterações na API. mesmo com a utilização dos controles nativos estendidos do Swing. a palheta de componentes ainda deixaram a desejar. pode não ser indicado para a implementação de aplicações comerciais de médio ou grande porte. No entanto. é possível também contornar esta deficiência por meio de bibliotecas de terceiros. A segurança herdada do Java. Para tanto. garantindo integridade e segurança dos softwares distribuídos pela rede de computadores. podem causar impactos indesejáveis na manutenção de um sistema que já esteja em produção. 2009a). ainda podem não apresentar um “arsenal” completo para o desenvolvimento de interfaces (DOEDERLEIN. é possível realizar a extensão manualmente de componentes Swing e/ou a incorporação de frameworks de terceiros. podem simplificar o processo de implementação de controles sincronizados com componentes em tela. para suprir tais necessidades. ainda pode não ser considerado competitivo como seus concorrentes. Também como fatores importantes foram satisfatórios o desempenho nas plataformas web e desktop. ainda podem ser considerados muito simples para construção de interfaces mais complexas. contudo. podem exigir um esforço considerável para o posicionamento manual e alinhamento dos componentes. que embora possam aprimorar ou corrigir possíveis falhas de arquitetura. FLEX ou Silverlight. como o JavaFX 1. • Efetuar estudos sobre a arquitetura do compilador. e versões posteriores a serem lançadas. abordando seus principais aspectos positivos e negativos.2-b603”. conforme pode ser observado em algumas nomenclaturas dos diretórios do SDK referenciados pelo IDE Netbeans. Embora não divulgado formalmente. ambiente de desenvolvimento visual com o lançamento da ferramenta JavaFX Authoring Tool. . podem prometer a inclusão de novos componentes gráficos. Realizar comparações com outras linguagens RIAs similares.49 desenvolvimento visual . maior estabilidade. e a suas melhores práticas. como exemplo o “1.2 e 1. tais como aprimoramento de desempenho. • Aprofundar nos conhecimentos na Linguagem JavaFX Script. analisando todo seu contexto.2. além da integração com outras novas plataformas. o próprio compilador ainda pode estar no estágio beta. como televisores e dispositivos embarcados. a falta de IDEs mais estáveis. e por fim.essencial para a adesão de leiautistas. que representam respectivamente o JavaFX 1.2. poderiam ser aceitáveis. portanto a presença de bugs e instabilidades no ambiente de desenvolvimento. Por fim é importante ressaltar que o presente trabalho focou o JavaFX até o release 1. dentre outras melhorias. com o objetivo de apresentar o funcionamento e os conceitos envolvidos . bem como o mapeamento de seus principais componentes.2-b31” e “1.1. Com trabalhos futuros para a presente pesquisa. Tal indício pode indicar que o estagio de evolução possivelmente ainda está em testes. é proposto: • Avaliar a performance dos aplicativos JavaFX através de implementação de programas focados em testes de desempenho.3. enfatizando comparações com seus concorrentes.explorando suas vantagens e desvantagens. gerenciadores de leiaute. adobe. HILDEBRANDT.. 2009] Visão geral do Flex. [BAIR.com/docs/articles/javafx1-2. JavaFX: RIA a todo vapor – Apresentando a JavaFX 1. 2009. Rio de Janeiro: DevMedia Group.macromedia. mar. 1999] AUSTIN. n. Disponível em: <http://www.2 Technology: Features and Enhancements. Acesso em 03 de jan.jsp>. 2009] BAIR Richard. [DOEDERLEIN. 2009] CHOUDHARY. COMAI.acm. Acesso em 15 de nov.1145649&coll=GUIDE&dl=GUIDE&C FID=4422105&CFTOKEN=26041127 >. 2006] BOZZON. Disponível em: <http://download. [ALLAIRE. Acesso em 25 de nov. p. Osvaldo Pinali. 50-60. Conceptual Modeling and Code Generation for Rich Internet Applications. Macromedia Flash MX—A next-generation rich client. Java Magazine. Disponível em: <http://javafx. Monica. Calvin.com/docs/tutorials/deploy-applet/>. de 2009. Vaibhav. Java Magazine. Acesso em 10 de jan.html>. Acesso em 5 de ago. Jeremy.67. 2002] ALLAIRE. de 2009. Osvaldo Pinali. JavaFX 1. de 2009.com/pub/flash/whitepapers/richclient. PAWLAN.com/developer/onlineTraining/Programming/JDCBook/signed.org/citation. 2009. Giovanni Toffetti. [AUSTIN. 2009] CHO. Deploy A Rich Internet Application Developed With JavaFX Technology.com/docs/tutorials/deployment/>. n. de 2009. 2009] CASTILLO. Disponível em: <http://portal. Advanced Programming for the Java 2 Platform: Chapter 10: Signed Applets Disponível em: <http://java. p.com/br/products/flex/overview>.7. Acesso em out. JavaFX Applets in the Browser: Learn best practices for deploying JavaFX applications as applets in a browser Disponível em: <http://javafx. Alessandro. 50-60. [CHOUDHARY. 2009a] DOEDERLEIN. [CHO. Sara. Inyoung. v. Disponível em: <http://javafx.0 e JavaFX Mobile. FRATERNALI. Uma “Aplicação Comum” em JavaFX: JavaFX não é só para multimídia e efeitos gráficos. [CASTILLO. de 2009. REFERÊNCIAS [ADOBE.pdf>. de 2009. Nancy. de 2010.cfm?id=1145581. de 2010. Rio de Janeiro: DevMedia Group. Acesso em 30 de nov.com/2009/06/skinning-architecture-in-javafx/>. CARUGHI. Acesso em 30 de nov. Cindy. Skinning Architecture in JavaFX. [BOZZON.sun. 2009b] DOEDERLEIN. set. .7. [DOEDERLEIN. Piero.72.50 5. Disponível em: <http://fxexperience. v. Christopher. Acesso em 26 de out. Leslie T. [NICHOLAS. F3. Laurence. MORALES-CHAPARRO. PRECIADO.aspx>. JavaFX Mobile . de 2009. de 2009. 2007] MORONEY. [O'NEILL. Christopher. Disponível <http://blogs.com/chrisoliver/entry/from_f3_to_javafx_1>.microsoft. Acesso em 30 de nov. de 2010.com/featured-articles/2007- . Richard. de 2009. Introdução ao Silverlight.com/chrisoliver/entry/f3>. [OLIVER. Create a Secure JavaFX Application.com/javafx/1/tutorials/core/getStarted> Acesso em 13 de nov. de 2009. Acesso em out. A Big Step.javaworld. de 2009. Disponível em: <http://sunsite. de 2009.net/blog/malenkov/archive/2009/04/weather_on_sunt. Sergey. Juan Carlos. [LINAJE.sun. Welcome. [MAREJKA. 2009] OLIVER. Acesso em out. Paul. Introducing Java SE 6 update 10.com/javaworld/jw-092008/jw-09-6u10.rwthaachen.com/docs/techtips/Create-Secure-JavaFXApp/index.java. Scott. Disponível em: <http://www.A Little Thing.sun. Acesso em out. settop. Christopher.dev.sun. de 2009.sun. On the Implementation of Multiplatform RIA User Interface Components. [KOSTOVAROV. Dmitry. 2008] NICHOLAS. Acesso em 17 de out. Disponível em: <http://weblogs. de 2009. 2009] KOSTOVAROV. Disponível em: <http://java.jsp>.sun.html?page=1>. 2009] MALENKOV. Rober. Ethan. Lesson 1: Getting Started with JavaFX Script. Create rich content applications for mobile. em: [OLIVER. Disponível em: <https://openjfx.net/servlets/ReadMsg?list=dev&msgNo=26>. Disponível em: <http://javafx. Acesso em 7 de jan.0 .jsp>. [KRILL.html>. de 2009. 2008] KRILL. 2007] O'NEILL. Disponível em: <http://www.com/javaone/sf/2007/articles/javafxmobile. Disponível em: <http://blogs. Disponível em: <http://java. Acesso em 3 de nov. 2008] LINAJE.com/pt-br/library/cc580591.51 [HOMMEL. Java SE 6u10 to solve JRE and Java application deployment issues. [MALENKOV. 2009] HOMMEL.com/developer/technicalArticles/javase/java6u10>. From F3 to JavaFX 1.Effects. 2007] OLIVER.pdf>. Weather on SunTechDays. [MORONEY. 2007] MAREJKA. Fernando. de 2009. Marino.sun.java. Disponível em: <http://msdn.. and desktop devices with JavaFX. 2006] OLIVER.de/Publications/CEUR-WS/Vol-445/02icwe2008ws-iwwost08-linaje.informatik. SANCHEZ-FIGUEROA. Acesso em 20 de dez. [OLIVER. Disponível em: <http://java. Acesso em 3 de set. xml>. 2007b] Sun Welcomes SavaJe Technologies. A Look at Rich Internet Applications.net/plugin2/jnlp/>. De 2009.3.com/theodore/doc/richinetapp. Disponível em: <http://java.2. Acesso em 17 de out. Disponível em: <http://javafx.1.20070508. Disponível compiler.20090602. 2007a] Sun Radically Simplifies Content Authoring . 2008b] JavaTM SE 6 Update Release Notes. Acesso em 30 de nov.pdf>.com/software/savaje/index.Previews JavaFX Script. 2009a] OpenFX Project Home.com/aboutsun/pr/2009-06/sunflash. em: <https://openjfx- [OpenFX.sun.20081204. de 2009.xml>.com/aboutsun/pr/200705/sunflash. de 2009. 2009c] JavaFX | Rich Internet Applications Development | RIAs Java FX.com/aboutsun/pr/200705/sunflash.sun. Disponível em: <https://jdk6. Disponível em: [SUN.com>. de 2009. Acesso em out.com/software/javafx>. Acesso em 8 de jan. [SUN. Disponível em: <http://wolfpaulus. 2007c] Sun Unveils Mobile Software at JavaOne Conference Attended By 15. [SUN.sun. Acesso em 12 de out. 2009a] Sun Microsystems JavaFX web site. [SUN. em: [SUN.xml>. 2007d] JNLP Support in the New Java™ Plug-In Technology. [SUN.6. 2004] O'ROURKE. Acesso em out.jsp?intcmp=hp2007may08_javafx_read>. 2009b] [Sun Releases New Java and JavaFX Software Updates and Previews JavaFX TV. Acesso em 17 de out. de 2009. de 2009. Strong Demand Powers 250 Million JavaFX Downloads. Acesso em out.java. Acesso em 10 de out. Disponível em: <http://www.0 with Immersive Media Capabilities Targeted at Market's 800 Million Java Powered Desktops. Disponível em: <http://www. Acesso em out. Acesso em 20 de ago. Disponível <http://www. 2008a] Sun Microsystems Unveils JavaFX 1.html>.com/javase/6/webnotes/6u10. Disponível em: <http://www.sun. [OpenFX. de 2009.xml>.com/wiki/Embeded_SQL_or_LINQ_support>. Cameron.dev.wikia.java. de 2009. . 2009b] Embeded SQL or LINQ support. Acesso em 30 de nov. <http://www.com/aboutsun/pr/2008-12/sunflash.sun. Acesso em out. Disponível em: <http://www.20070508.sun.52 0508/javafx/index. [O'ROURKE. de 2009. Disponível em: <http://jfx.xml>.sun.dev. [SUN. [SUN. de 2009.net>. de 2009.000 Developers. [SUN. de 2009. de 2010. 1 API.HttpRequest. IVERSON. 2009f] JavaFX 1.data.pull. [SUN. Disponível em: <http://javafx. de 2009.. Acesso em 5 de jan. 2009g] OEM Early Access.2. 2009l] JavaFX™ Mobile 1.53 [SUN.com/javafx/1. 544 p.http. de 2010. Acesso em 17 de out. de 2009.sun. Acesso em 15 de dez. [SUN. [WEAVER. Acesso em 3 de nov. de 2009.PullParser. Acesso em 5 de nov. FXD).sun. James L.sun. de 2009.html>.sun. de 2009.pdf>. Acesso em 10 de agos.com/docs/books/tutorial/deployment/jar/signindex.1 API.io.2. [SUN.pull/javafx.html>.ht ml>. Acesso em 15 de dez. Disponível <http://www. Stephen.io. Application. de 2009. [SUN. Weiqi. Disponível em: <http://java. Acesso em 11 de jan. Disponível em: <http://javafx. Acesso em 30 de nov. Disponível em: <http://javafx.com/oem/eda.1 Production Suite Release Notes.sun. 2009j] General Questions.html>.Storage. Acesso em 25 de nov.sun. 2009h] Integrate Graphic Assets Into Your JavaFX. Disponível em: <http://java. javafx. 2009d] JavaFX Script – Overview.com/faq/>.html >.http.javafx. Disponível em: <http://java. 2009o] Signing and Verifying JAR Files. 2009k] JavaFX 1. [SUN.com/javafx/1.io.com/javafx/1/reference/releasenotes/production-suite-release-notes1-1.2/docs/api/javafx.sun. de 2009. 2009.com/docs/integrate-graphic-assets/Fileformats. 2009] WEAVER. [SUN. [SUN. Acesso em 7 de nov.sun.1 API.com/downloads/mobile/ReleaseNotes.com/javafx/1/reference/system-requirements-12.HttpRequest.2.io. javafx. Berkeley: Apress.com/javafx/1.com/docs/integrate-graphic-assets>. . Acesso em 30 de nov. Disponível em: <http://java.io/javafx. 2009n] JavaFX 1.data.2 for Windows Mobile OS Release Notes. 2009i] JavaFX Graphics Files (FXZ. javafx.Storage.jsp>.jsp>. Pro JavaFX™ Platform: Script.2/docs/api/javafx. GAO. [SUN. Disponível em: <http://java. 2009e] Software and System Requirements for JavaFX Technology. CHIN. de 2009.io.pull. Disponível em: <http://java. 2009m] JavaFX 1. Dean.PullParser. de 2009. Disponível em: <http://www. Desktop and Mobile RIA with Java™ Technology.http/javafx. em: [SUN.2/docs/api/javafx. Disponível em: <http://www. [SUN. de 2009.html>. de 2010. [SUN.data.com/software/javafx/script/index.jsp>. Acesso em 15 de set. 2002] ZUKOWSKI.com/developer/technicalArticles/Programming/jnlp/>. Deploying Software with JNLP and Java Web Start. John. . de 2009.54 [ZUKOWSKI. Disponível em: <http://java.sun. Michael. de 2009.ibm.com/javafx/1/tutorials/ui/overview/index. [3] PILGRIM. Acesso em 15 de dez. Acesso em 7 de jan.sun.sun. Creating mashups with JavaFX. de 2010. Disponível em: <http://java. de 2009.sun.html>.com/developerworks/web/library/wa-javafx/>.infoq.55 6. de 2009. Acesso em 20 de dez. de 2009. Michael. Building GUI Applications With JavaFX. [5] GALPIN. Disponível em: <http://java. Acesso em 21 de set.Tutorial Overview. Disponível em: <http://java. . Scott. Learning the JavaFX Script Programming Language . Peter. [4] HEINRICHS. JavaFX Mobile Applications — Best Practices for Improving Performance. Enterprise Java FX for the Web Platform.com/presentations/Java-FX-Peter-Pilgrim>. Disponível em: <http://www. Alla. Disponível em: <http://www. BIBLIOGRAFIA CONSULTADA [1] HOMMEL. [2] REDKO.com/javafx/1/tutorials/core>.com/developer/technicalArticles/javafx/mobile/>. Acesso em 15 de agos. 56 7. APÊNDICES . Button. FontWeight.paint.57 7.inform("Informação".CENTER layoutX: bind (cena. 20) content: "JavaFX" } Button { text: "Botão" action: function () { var dataAtual = new Date().scene.stage.1.Date.Stage. if("{__PROFILE__}" != "mobile") Alert.scene.font("Arial".scene.vbox. import javafx. Stage { title: "Primeiro Projeto" var cena: Scene = Scene { fill: Color.VBox. import javafx.width . } } ] } ] } scene : cena } .stage.text.scene. import javafx.HPos.Text. import javafx. import javafx.BOLD.AQUAMARINE width: 250 height: 250 var vbox: VBox content: [ vbox = VBox { spacing: 20 nodeHPos: HPos.control.util.layoutBounds. import java.geometry.scene.Color.Alert. import javafx.FontWeight. "Alô Mundo! {dataAtual}").Scene.width) /2 content: [Text { font: Font. import javafx. import javafx.text.scene.Font.Código Fonte do primeiro exemplo package primeiroprojeto. import javafx.layout.scene. import javafx. APÊNDICE A .text. textoDisplay columns: 12 editable: false layoutInfo: LayoutInfo {width: 203 height: 40} selectOnFocus: false } ] } Tile { columns: 4 rows: 1 tileHeight: tamanhoBotao tileWidth: tamanhoBotao vgap: 1 hgap: 1 content: [ Button { text: "C" id: "idC" styleClass: "botoesTecla" onMouseClicked: controller.LayoutInfo. "4".scene.layout. import javafx.layout. "5".onMouseClickedBotaoC onKeyPressed: controller.Button. def operadoresCantoSuperior = ["/". "9".scene. "8". import javafx.layout. "1". APÊNDICE B – Código fonte da classe InterfacePadraoView package view.scene.layout. import javafx.onKeyPressedCalculadora.TextBox.control.2. "*". import javafx. import javafx. "6". import javafx. } .HBox.Node. public class InterfacePadraoView extends CalculadoraView { override protected function create(): Node { VBox { layoutX: 20 content: [ HBox { content: [TextBox { text: bind controller.scene. "-"].scene.58 7.VBox. def tamanhoBotao = 50. "3"].scene.control.Tile. import javafx. def numerosDe1a9 = ["7". "2".scene. onMouseClickedBotaoNumerico onKeyPressed: controller.onMouseClickedBotaoNumerico onKeyPressed: controller.onKeyPressedCalculadora.onKeyPressedCalculadora. } } ] } HBox { spacing: 1 content: [ Button { layoutInfo: LayoutInfo {height: tamanhoBotao width: tamanhoBotao * 2} text: "0" id: "id0" styleClass: "botoesTecla" onMouseClicked: controller.onKeyPressedCalculadora. styleClass: "botoesTecla" } } ] } HBox { content: [ VBox { content: [ Tile { columns: 3 rows: 3 tileHeight: tamanhoBotao tileWidth: tamanhoBotao vgap: 1 hgap: 1 content: [ for (numero in numerosDe1a9) { Button { text: numero id: "id{numero}" styleClass: "botoesTecla" onMouseClicked: controller. } Button { .59 for (operador in operadoresCantoSuperior) { Button { text: operador id: "id{operador}" onMouseClicked: controller.onMouseClickedBotaoOperador onKeyPressed: controller. onKeyPressedCalculadora.onKeyPressedCalculadora. } ] } ] } ] } } } .onKeyPressedCalculadora.onMouseClickedBotaoOperador onKeyPressed: controller.onMouseClickedBotaoIgual onKeyPressed: controller." styleClass: "botoesTecla" onMouseClicked: controller. } Button { text: "=" id: "id=" styleClass: "botoesTecla" onMouseClicked: controller. } ] } ] } Tile { columns: 1 rows: 2 tileHeight: tamanhoBotao * 2 tileWidth: tamanhoBotao vgap: 2 hgap: 1 content: [ Button { text: "+" id: "id+" styleClass: "botoesTecla" onMouseClicked: controller.60 layoutInfo: LayoutInfo {height: tamanhoBotao width: tamanhoBotao} text: ".onMouseClickedBotaoPonto onKeyPressed: controller. VK_NUMPAD7. KeyCode.VK_5.scene.VK_NUMPAD0].HashMap. var calculadora: Calculadora. postinit { operador = null.util. "id9". KeyCode.3. var mapaBotoesNumericos: Map.KeyCode. calculadora = Calculadora {}.VK_0]. KeyCode. def idsBotoesNumericos = ["id1". "id*".VK_9.Operacao. public class Controller { var op1: Double. import calculadora. KeyCode.input. "id2".VK_NUMPAD4.KeyEvent. import java. "5". KeyCode.Map. . KeyCode. import javafx.VK_NUMPAD6. "id5".VK_NUMPAD2. KeyCode.MouseEvent.VK_ADD.VK_NUMPAD1. import calculadora.VK_NUMPAD9. "id-".VK_3. "9".VK_1. KeyCode.NumberFormatException. var mapaTeclasNumericas: Map. "id3". def teclasOperadores = [KeyCode. KeyCode.input. def numeros = ["1". KeyCode. "4". KeyCode. KeyCode. import javafx. public-read var textoDisplay: String. var mapaTeclasNumPad: Map. var operacaoSinalizada: Boolean = false.VK_MULTIPLY.values(). var isDecimal: Boolean.Calculadora.VK_NUMPAD8.VK_SUBTRACT. def idsBotoesOperadores = ["id+". KeyCode. KeyCode. "7". KeyCode. import javafx. "id8". var operador: Operacao. def teclasNumPad = [KeyCode.VK_DIVIDE]. import java. "id/"]. KeyCode. KeyCode. "id7". "id6".input. "id0"]. def operadores = Operacao. def teclasNumericas = [KeyCode. var op2: Double.VK_6. APÊNDICE C – Código fonte da classe Controller package calculadorafx. KeyCode.VK_NUMPAD5.VK_8.VK_2. KeyCode.61 7.scene.util.lang. KeyCode. "3". var mapaBotoesOperadores: Map. "2".VK_NUMPAD3. "6". import java. "8". "0"]. var mapaTeclasOperadores: Map.VK_7. KeyCode. "id4".VK_4.scene. mapaTeclasNumPad = new HashMap(). mapaBotoesOperadores = new HashMap().MULTIPLICACAO) { calculadora. } function controlaDisplay(numeroDigitado: String) { if ("null".put(teclasOperadores[i].equals(numeroDigitado)) { return .DIVISAO) { calculadora. } public function onMouseClickedBotaoNumerico(e: MouseEvent): Void { controlaDisplay(mapaBotoesNumericos.node. } else if (operador == Operacao.divide(op1. operadores[i]).put(idsBotoesNumericos[i]. mapaTeclasOperadores = new HashMap().soma(op1.put(idsBotoesOperadores[i]. operadores[i]). numeros[i]). op2). numeros[i]). } else if (operador == Operacao. op2).multiplica(op1.id) as String). } for (i in [0.9]) { mapaBotoesNumericos.subtrai(op1.put(teclasNumPad[i]. mapaTeclasNumericas.SUBTRACAO) { calculadora. mapaTeclasNumericas = new HashMap(). for (i in [0.put(teclasNumericas[i]. mapaTeclasOperadores. } if (operacaoSinalizada) { . isDecimal = false.62 mapaBotoesNumericos = new HashMap(). op2). op2). } } public function calcula(): Double { return if (operador == Operacao.. operador = null. } else if (operador == Operacao..3]) { mapaBotoesOperadores.get(e. numeros[i]). } else { 0 } } public function onMouseClickedBotaoC(e: MouseEvent): Void { textoDisplay = "". mapaTeclasNumPad.SOMA) { calculadora. get(e.code == KeyCode.get(e.onMouseClickedBotaoPonto(null).equals("")) { return . } else { textoDisplay += numeroDigitado. operacaoSinalizada = false.code == KeyCode.code) as String. if (e.onKeyPressedBotaoNumerico(e).VK_DECIMAL) { this. if (testeOperador == null or textoDisplay. teclaPressionada = if (teclaPressionada != null) "{teclaPressionada}" else "{mapaTeclasNumPad. } function onKeyPressedBotaoOperador(e: KeyEvent): Void { def testeOperador: Operacao = mapaTeclasOperadores.onKeyPressedBotaoOperador(e). controlaDisplay(teclaPressionada).63 textoDisplay = numeroDigitado.equals("")) { return . } public function onKeyPressedCalculadora(e: KeyEvent): Void { this.get(e.code)}". } } function onKeyPressedBotaoNumerico(e: KeyEvent): Void { var teclaPressionada = mapaTeclasNumericas. } operador = testeOperador.code) as Operacao. } .VK_ENTER) { this. } else if (e. } } public function onMouseClickedBotaoOperador(e: MouseEvent): Void { if (textoDisplay. this.onMouseClickedBotaoIgual(null). sinalizaOperador(). } try { op1 = Double. operador = null. reiniciar(). } public function onMouseClickedBotaoIgual(e: MouseEvent): Void { if (operador == null) { return . } textoDisplay += ".get(e. } } public function onMouseClickedBotaoPonto(e: MouseEvent): Void { if (not isDecimal) { isDecimal = true.parseDouble(textoDisplay). if (textoDisplay. } textoDisplay = "{calcula()}". } } .". } try { op2 = Double.id) as Operacao.equals("")) { textoDisplay = "0". } catch (nfe: NumberFormatException) { operador = null.node.64 operador = mapaBotoesOperadores. sinalizaOperador(). } function sinalizaOperador() { if (operador == null) { return .parseDouble(textoDisplay). operacaoSinalizada = true. return . } } function reiniciar() { isDecimal = true. } catch (nfe: NumberFormatException) { operador = null. scene.LayoutInfo.Contato.salvar(contato).4.text.ddd}".scene.scene. import javafx.Panel.text). import javafx. import javafx.text = "{contato.stage. .HBox. var tfTelefone: TextBox. import javafx.65 7.control. } catch (nfe: NumberFormatException) { Alert.Label.control.text = "{contato.geometry.scene.Button.valueOf(tfTelefone. APÊNDICE D – Código fonte da classe ManutencaoContatoView package gui. import javafx.nome}".scene. import javafx.layout.layout. } var tfNome: TextBox. import javafx. import javafx.scene. import javafx.Font. } controller. import entidade.text = "{contato. tfDdd. import javafx.text.scene.text. def larguraBotao = 70.control.valueOf(tfDdd. "Telefone Inválido").text).FontWeight.telefone}".telefone = Integer.inform("Erro".layout. import javafx. tfTelefone. var tfDdd: TextBox.HPos. try { contato.layout. } function salvar() { contato. contato. import java.lang. public class ManutencaoContatoView extends AgendaView { public var contato: Contato on replace { inicializaTela().nome = tfNome. function inicializaTela() { tfNome.ddd = Integer.TextBox.scene. import javafx.geometry.VBox.scene.NumberFormatException.Alert.VPos. height: 50} text: ##[Manutenção contato]"Manutenção contato" font: Font.CENTER } ] } Panel { layoutInfo: LayoutInfo {width: Controller. 18) hpos: HPos.font("Arial".66 } override def content = VBox { content: [ HBox { content: [ Label { layoutInfo: LayoutInfo {width: Controller.DEMI_BOLD. FontWeight.larguraTela.larguraTela height: 230} content: [ Label { layoutX: 8 layoutY: 4 text: ##[Nome]"Nome:" } tfNome = TextBox { layoutX: 69 layoutY: 4 text: "" columns: 14 selectOnFocus: false } Label { layoutX: 8 layoutY: 34 text: ##[Telefone]"Telefone:" } tfDdd = TextBox { layoutX: 69 layoutY: 34 text: "" columns: 2 selectOnFocus: true } tfTelefone = TextBox { layoutX: 119 layoutY: 34 text: "" columns: 8 selectOnFocus: true } . question("Aviso".67 ] } HBox { vpos: VPos.remover(contato)) { controller. action: function () { if (controller. } } } Button { text: ##[Excluir]"Excluir" layoutInfo: LayoutInfo {width: larguraBotao}. } } Button { text: ##[Cancelar]"Cancelar" layoutInfo: LayoutInfo {width: larguraBotao}. ##[Cancelar Operação]"Deseja realmente cancelar a operação?")) { controller.moveTelaLista(). action: function () { if (Alert. action: function () { salvar().BOTTOM spacing: 10 content: [ Button { text: ##[Salvar]"Salvar" layoutInfo: LayoutInfo {width: larguraBotao}.moveTelaLista(). } } } ] } ] } } . .close().readInt().resource. def source: String = "Agendas". import java. import entidade. public class BaseDeDados { var storage: Storage. APÊNDICE E – Código fonte da classe BaseDeDados package persistencia.readUTF() ddd: dis.list() == null) { return null.printStackTrace(). var contatos: Contato[] = for (i in [1.readInt() } } try { is.io.qtdeRegistros]) { Contato { id: dis.DataInputStream.IOException. import java. } return contatos. public function lerTodos(): Contato[] { if (Storage. def qtdeRegistros: Integer = dis.Storage.DataOutputStream. import java.io.io.Contato.openInputStream(). } public function salvar(contatos: Contato[]) { storage = Storage {source: source}. import javafx.io.68 7. def dis = new DataInputStream(is).5.readLong() nome: dis. } storage = Storage {source: source}. def is = storage. } catch (ex: IOException) { ex..readInt() telefone: dis. ddd).writeUTF(c.nome). } catch (ex: IOException) { ex.resource.writeInt(c. dos. try { dos. dos.writeLong(c.writeInt(c.telefone).writeInt(sizeof contatos).openOutputStream(true). } } } .printStackTrace().69 def os = storage.close(). } dos.id). def dos = new DataOutputStream(os). for (c in contatos) { dos. dos. APÊNDICE F – Código fonte da classe RequisicaoServidor package integracao.PullParser.Contato.io.http.type == PullParser. } } } parser. . import javafx.parseInt(e. import java.pull. } finally { inputStream.pull.70 7.parseLong(e.start().async.salvarOuAtualizaContato(contato).getAttributeValue("telefone")) } agendaDao.close(). public class RequisicaoServidor extends RunnableFuture { public-init var agendaDao: AgendaDao.io. import entidade.getAttributeValue("ddd")) telefone: Integer. try { var parser: PullParser = PullParser { input: inputStream documentType: PullParser. import javafx.6. } } }.Event.qname.InputStream.XML onEvent: function (e: Event) { if (e.RunnableFuture.data.AgendaDao.getAttributeValue("id")) nome: e. import persistencia.data.parse().getAttributeValue("nome") ddd: Integer.parseInt(e. def urlServidor = "http://localhost:8084/servicoAgendaFX/contatos".START_ELEMENT and e. import javafx. import javafx. override public function run(): Void { HttpRequest { location: urlServidor onInput: function (inputStream: InputStream) { var contato: Contato.name == "contato") { contato = Contato { id: Long.HttpRequest. 71 } } . 72 8. ANEXOS Palavras reservadas abstract after and as assert at attribute before bind bound break catch class continue def delete else exclusive extends false finally first for from into inverse last lazy mod new not null on or override package postinit private protected public-init public public-read replace return reverse sizeof static step this throw trigger true try tween typeof var where while with this throw trigger true try tween typeof var where while with this throw .
Copyright © 2024 DOKUMEN.SITE Inc.