blob: bd4208d9a3250867ce1aa6c5ce6fc50d25b01e5a [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<title>Tutorial para criar uma IU SVG ativada por toque para dispositivos Java ME - NetBeans IDE</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<link rel="stylesheet" type="text/css" href="../../../netbeans.css">
<meta name="Karol Harezlak" content="">
</head>
<body>
<a name="top"></a>
<h1>Criando uma IU SVG ativada por toque para dispositivos Java ME</h1>
<p>Este tutorial mostra como desenvolver IUs ricas para dispositivos de tela por toque com base no Java ME usando widgets IU SVG. O r&aacute;pido crescimento do n&uacute;mero de dispositivos de tela por toque com base no Java ME, como o Samsung Omnia e Instinct, Nokia 5800 Xpress Music ou Blackberry Storm, torna esta leitura essencial para qualquer desenvolvedor s&eacute;rio de aplicativo m&oacute;vel. O aplicativo criado neste tutorial funciona na maioria dos dispositivos que suportam a API SVG para o J2ME (<a href="http://jcp.org/en/jsr/summary?id=226">JSR226</a>), j&aacute; que os dispositivos de tela por toque tamb&eacute;m oferecem suporte a ricos widgets IU SVG.</p>
<!--<p class="notes"><b>Observa&ccedil;&atilde;o:</b> se voc&ecirc; estiver usando o NetBeans IDE 6.8, consulte o tutorial <a href="../../68/javame/svgtouch.html">Criando uma IU SVG habilitada para toque para dispositivos Java ME no NetBeans IDE 6.8</a>.</p>-->
<h3>Conte&uacute;do</h3>
<img src="../../../images_www/articles/69/netbeans-stamp-69-70-71.png" class="stamp" alt="O conte&uacute;do desta p&aacute;gina se aplica ao NetBeans IDE 6.9 ou posterior" title="O conte&uacute;do desta p&aacute;gina se aplica ao NetBeans IDE 6.9 ou posterior" >
<ul>
<li><a href="#reqs" title="Requisitos do Tutorial">Requisitos do Tutorial</a></li>
<li><a href="#setup" title="Configurando o ambiente do projeto">Configurando o ambiente do projeto</a></li>
<li><a href="#svgcomp" title="Criando a IU no SVG Composer">Criando a IU no SVG Composer</a>
<ul>
<li><a href="#backinfo" title="Informa&ccedil;&otilde;es b&aacute;sicas">Informa&ccedil;&otilde;es b&aacute;sicas</a></li>
<li><a href="#svgintro" title="Introdu&ccedil;&atilde;o aos widgets SVG e suas fun&ccedil;&otilde;es">Introdu&ccedil;&atilde;o aos widgets SVG e suas fun&ccedil;&otilde;es</a></li>
<li><a href="#svgui" title="Etapas para criar a IU SVG">Etapas para criar a IU SVG</a></li>
<li><a href="#createmidlet" title="Criando um MIDlet no Visual Mobile Designer">Criando um MIDlet no Visual Mobile Designer</a></li>
</ul></li>
<li><a href="#vmdflow" title="Usando o Visual Mobile Designer para criar um fluxo do aplicativo">Usando o Visual Mobile Designer para criar um fluxo do aplicativo</a></li>
<li><a href="#applogic" title="Adicionando a l&oacute;gica do aplicativo na IU">Adicionando a l&oacute;gica do aplicativo na IU</a>
<ul>
<li><a href="#background" title="Informa&ccedil;&otilde;es b&aacute;sicas">Informa&ccedil;&otilde;es b&aacute;sicas</a></li>
<li><a href="#creatingsvg" title="Criando um modelo SVGList personalizado">Criando um modelo SVGList personalizado</a></li>
<li><a href="#nextprevious" title="L&oacute;gica dos bot&otilde;es Avan&ccedil;ar e Voltar">L&oacute;gica dos bot&otilde;es Avan&ccedil;ar e Voltar</a></li>
</ul></li>
<li><a href="#uitest" title="Testando o aplicativo em um emulador de dispositivo de tela por toque">Testando o aplicativo em um emulador de dispositivo de tela por toque</a></li>
<li><a href="#summary" title="Resumo">Resumo</a></li>
<li><a href="#see-also">Consulte tamb&eacute;m</a></li>
</ul>
<h2><a name="reqs"></a>Requisitos</h2>
<p><b>Para concluir este tutorial, voc&ecirc; precisa dos seguintes recursos e softwares:</b></p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">Software ou recurso</th>
<th class="tblheader" scope="col">Vers&atilde;o necess&aacute;ria</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE com Java ME</a></td>
<td class="tbltd1">Vers&atilde;o 6.9 ou posterior</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java Development Kit</a> (JDK)</td>
<td class="tbltd1">Vers&atilde;o 6 ou 7 </td>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/projects/samples/downloads/download/Samples/Mobile/ContactBrowserExample.zip">Exemplo Contact Browser</a></td>
<td class="tbltd1">Projeto NetBeans</td>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/projects/www/downloads/download/mobility%252Forg-netbeans-modules-mobility-svg-snippets.nbm">Fragmentos de IU SVG</a></td>
<td class="tbltd1">Plug-in NetBeans</td>
</tr>
</tbody>
</table>
<p class="notes">Para assegurar-se de que os recursos Java ME estejam habilitados, recomendamos executar uma instala&ccedil;&atilde;o personalizada e desmarcar Recursos sob demanda durante a instala&ccedil;&atilde;o do IDE.</p>
<h2><a name="setup"></a>Configurando o ambiente do projeto</h2>
<p> Al&eacute;m do software requerido listado acima, voc&ecirc; deveria ter o seguinte instalado em seu computador:</p>
<ul>
<li>O arquivo <code>ContactBrowser.zip</code> deveria ser descompactado na sua pasta de projetos NetBeans.</li>
<li>O plug-in dos fragmentos SVG deveria ser baixado e instalado no NetBeans:
<ol>
<li>No IDE, v&aacute; para Ferramentas &gt; Plug-ins. Clique na aba Download e clique em Adicionar plug-in.</li>
<li>V&aacute; at&eacute; a pasta local que cont&eacute;m o arquivo <tt>svg-snippets.nbm</tt>, selecione o arquivo e clique em Instalar.</li>
</ol></li>
<li>Clique em Instalar e o IDE o guiar&aacute; atrav&eacute;s da instala&ccedil;&atilde;o do plug-in. Ap&oacute;s o plug-in ser instalado, &eacute; preciso reiniciar o IDE. </li>
<li>Ap&oacute;s reiniciar o IDE, v&aacute; para Ferramentas &gt; Op&ccedil;&otilde;es. Clique em Diversos na janela da caixa de di&aacute;logo Op&ccedil;&otilde;es e, a seguir, clique na aba SVG.</li>
<li>Na se&ccedil;&atilde;o Fragmentos de componentes SVG ricos abra o menu suspenso Fragmentos e escolha <strong>Fragmentos SVG J1 HOL</strong>. Clique em OK.
<p class="align-center"><a href="../../../images_www/articles/71/mobility/svgtouch/ex0_3.png" rel="lytebox"
title="Caixa de di&aacute;logo de op&ccedil;&otilde;es"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex0_3-small.png"
alt="Caixa de di&aacute;logo de op&ccedil;&otilde;es" border=1></a></p>
</li>
</ul>
<p class="align-center"><a href="#top">in&iacute;cio</a></p>
<h2><a name="svgcomp"></a>Criando a IU no SVG Composer</h2>
<p> Construiremos uma IU de aplicativo b&aacute;sico com base em SVG. Apesar do aplicativo ser bem simples, ele mostrar&aacute; como criar um novo aplicativo JavaME, como importar imagens SVG do SVG Composer para um MIDlet visual, e como executar o projeto em um emulador de dispositivo MIDP.</p>
<a name="backinfo"></a>
<h3>Informa&ccedil;&otilde;es b&aacute;sicas</h3>
<p><strong>SVG:</strong> o JSR-226 especifica a API para a renderiza&ccedil;&atilde;o de gr&aacute;ficos de vetor bidimensionais em XML. Ao inv&eacute;s de codificar o conte&uacute;do de cada pixel, como os formatos GIF e JPG, os gr&aacute;ficos de vetor cont&ecirc;m somente as instru&ccedil;&otilde;es de desenho para cada pixel. Isso oferece diversas vantagens &agrave;s imagens de vetor: </p>
<ul>
<li>S&atilde;o <strong>dimension&aacute;veis</strong>, portanto, a qualidade da imagem permanece a mesma em diferentes tamanhos e resolu&ccedil;&otilde;es. Tamb&eacute;m &eacute; poss&iacute;vel alongar, inverter ou reverter uma imagem sem perder a qualidade.</li>
<li>Oferecem suporte a <strong>scripts e anima&ccedil;&otilde;es, </strong>portanto, s&atilde;o ideais para gr&aacute;ficos interativos conduzidos por dados.</li>
<li>S&atilde;o<strong> compactas</strong>. As imagens com base em vetores podem ser at&eacute; dez vezes menores do que uma imagem id&ecirc;ntica no formato GIF ou JPEG. Esta importante vantagem torna poss&iacute;vel criar aplicativos graficamente ricos para dispositivos port&aacute;teis com recursos limitados. </li>
<li>Tamb&eacute;m permitem que os usu&aacute;rios <strong>possam interagir</strong> com o conte&uacute;do da imagem.</li>
<li>S&atilde;o <strong>pesquis&aacute;veis</strong>, permitindo que os usu&aacute;rios pesquisem por texto dentro da imagem. Por exemplo, os usu&aacute;rios podem pesquisar um mapa para encontrar nomes de ruas espec&iacute;ficos ou pesquisar uma lista de menus de restaurantes para encontrar seu prato favorito.</li>
</ul>
<p>Um subconjunto SVG com recursos completos destinado a dispositivos m&oacute;veis &eacute; denominado SVG-Tiny e o JSR-226 adota a vers&atilde;o 1.1 do perfil SVG-Tiny como o formato de arquivo oficial para gr&aacute;ficos de vetores J2ME.
</p>
<a name="svgintro"></a>
<h3>Introdu&ccedil;&atilde;o aos widgets SVG e suas fun&ccedil;&otilde;es</h3>
<p>A cria&ccedil;&atilde;o de interfaces de usu&aacute;rio fica mais f&aacute;cil ao usar o SVG Composer e os Componentes de IU no formato SVG ricos no NetBeans. </p>
<p>Vis&atilde;o geral dos fragmentos de IU SVG dispon&iacute;veis na paleta do SVG Composer:</p>
<ul>
<li>Lista SVG - Permite ao desenvolvedor criar uma lista de elementos da IU necess&aacute;rios para a IU.</li>
<li>Bot&atilde;o SVG - Nos fragmentos SVG, permite ao usu&aacute;rio selecionar o sexo.</li>
<li>Caixa de combina&ccedil;&atilde;o SVG - Componente da IU para menus de lista suspensa. </li>
<li>Texto SVG - Um campo no qual &eacute; poss&iacute;vel exibir textos como nomes de pessoas, IDs de produto etc. </li>
<li>Bot&atilde;o SVG - Os bot&otilde;es s&atilde;o usados para fun&ccedil;&otilde;es de Avan&ccedil;ar, Voltar, OK e outras fun&ccedil;&otilde;es da IU.</li>
<li>Girador SVG - Permite o usu&aacute;rio navegar atrav&eacute;s de uma vari&aacute;vel usando o bot&atilde;o Acima ou Abaixo.</li>
<li>Deslizador SVG - Permite ao usu&aacute;rio ajustar um recurso de vari&aacute;vel. Por exemplo, de claro para escuro ou 0-100%.</li>
<li>Legenda SVG - Permite que o usu&aacute;rio legende um campo de texto ou outro componente da IU.</li>
</ul>
<p class="align-center"> <a href="../../../images_www/articles/71/mobility/svgtouch/ex1_2.png" rel="lytebox"
title="Fragmentos de IU SVG dispon&iacute;veis na paleta do SVG Composer"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex1_2-small.png"
alt="Fragmentos de IU SVG dispon&iacute;veis na paleta do SVG Composer" border=1></a></p>
<p>Isso foi somente uma introdu&ccedil;&atilde;o r&aacute;pida aos componentes de IU SVG ricos. Para obter mais detalhes, consulte a p&aacute;gina <a href="http://wiki.netbeans.org/MobilityDesignerRichComponents">wiki do Visual Mobile Designer do NetBeans</a>.</p>
<a name="svgui"></a>
<h3>Etapas para criar a IU SVG</h3>
<p> Para iniciar rapidamente vamos come&ccedil;ar por abrir o projeto ContactBrowser preparado que usaremos como base para criar o projeto. </p>
<ol>
<li>Abra o projeto Java ME ContactBrowser preparado no NetBeans IDE.
<p>Vis&atilde;o geral do projeto ContactBrowser</p>
<p class="align-center"><img src="../../../images_www/articles/71/mobility/svgtouch/ex2_2.png"></p></li>
<li>Abra a imagem <code>employeeList.svg</code> no SVG Composer e arraste e solte dois bot&otilde;es SVG e um Componente de formul&aacute;rio de lista SVG na tela Visualizar da paleta, como ilustrado abaixo. Renomearemos os bot&otilde;es no tutorial posteriormente.
<p>Abaixo est&aacute; o formul&aacute;rio completo com os seguintes componentes adicionados:</p>
<ul>
<li>2 x bot&otilde;es</li>
<li>1 x lista</li>
</ul>
<p class="align-center">
<a href="../../../images_www/articles/71/mobility/svgtouch/ex2_3.png" rel="lytebox"
title="Formul&aacute;rio com dois bot&otilde;es e uma lista"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex2_3-small.png"
alt="Formul&aacute;rio com dois bot&otilde;es e uma lista" border=1></a>
</p></li>
<li>Na janela Visualizar, clique no bot&atilde;o OK do texto no canto superior esquerdo e arraste-o para esquerda, conforme ilustrado na captura de tela abaixo. Isso permitir&aacute; que a palavra &quot;Selecionar&quot; seja corretamente exibida no bot&atilde;o da IU.
<p class="align-center">
<a href="../../../images_www/articles/71/mobility/svgtouch/ex2_4b.png" rel="lytebox"
title="Formul&aacute;rio com dois bot&otilde;es e uma lista"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex2_4b-small.png"
alt="Formul&aacute;rio com dois bot&otilde;es e uma lista" border=1></a></p></li>
<li>Nossa IU SVG precisa de um arquivo SVG adicional, <code>employeeForm.svg</code>, portanto, novamente abrimos o arquivo e adicionamos bot&otilde;es, campos de texto, legendas e bot&otilde;es da paleta na imagem no SVG Composer e renomeamos os mesmos para criar a IU. Quando terminada, deveria ser semelhante &agrave; imagem abaixo.
<ul>
<li>Componentes adicionados
<ul>
<li>3 x bot&otilde;es</li>
<li>4 x legendas</li>
<li>2 x campos de texto</li>
<li>1 x bot&atilde;o</li>
<li>1 x girador</li>
</ul></li>
</ul>
<p class="align-center">
<a href="../../../images_www/articles/71/mobility/svgtouch/ex2_4.png" rel="lytebox"
title="Componentes SVG adicionados"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex2_4-small.png"
alt="Componentes SVG adicionados" border=1></a>
</p></li>
<li>Na janela Visualizar, clique no texto do bot&atilde;o OK no canto inferior esquerdo e arraste-o para esquerda, como ilustrado na captura de tela abaixo. Isso permitir&aacute; que a palavra &quot;Voltar&quot; seja corretamente exibida no bot&atilde;o da IU.
<p class="align-center">
<a href="../../../images_www/articles/71/mobility/svgtouch/ex2_4a.png" rel="lytebox"
title="Texto no bot&atilde;o OK arrastado para a esquerda"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex2_4a-small.png"
alt="Texto no bot&atilde;o OK arrastado para a esquerda" border=1></a>
</p></li>
</ol>
<a name="createmidlet"></a>
<h3>Criando um MIDlet no Visual Mobile Designer</h3>
<p>O framework de componentes IU SVG ricos &eacute; dividido em duas partes:</p>
<ul>
<li>Os fragmentos SVG s&atilde;o usados para construir a IU no SVG Composer ou em outro editor SVG.</li>
<li>As bibliotecas Java ME que suportam a funcionalidade de IU</li>
</ul>
<p>J&aacute; examinamos o SVG Composer e fragmentos, portanto, nosso pr&oacute;ximo passo &eacute; o de examinar as bibliotecas de tempo de execu&ccedil;&atilde;o no Visual Mobile Designer, que permitem mesclar as imagens SVG com a l&oacute;gica do aplicativo no c&oacute;digo-fonte Java ME.</p>
<ol>
<li>Para criar um novo MIDlet visual, selecione <tt>Arquivo</tt> &gt; <tt>Novo arquivo</tt> e a seguir, na caixa de di&aacute;logo Novo arquivo, em Categorias, selecione MIDP e em Tipos de arquivos escolha Visual MIDlet. O novo arquivo deve ser parte do pacote <tt>org.netbeans.lab.ui.svg</tt>.
<p class="align-center">
<a href="../../../images_www/articles/71/mobility/svgtouch/ex2_5.png" rel="lytebox"
title="Caixa de di&aacute;logo Novo Arquivo"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex2_5-small.png"
alt="Caixa de di&aacute;logo Novo Arquivo" border=1></a>
</p>
</li>
<li>Dentro do MIDlet rec&eacute;m-criado alterne para a visualiza&ccedil;&atilde;o Fluxo. Encontre a se&ccedil;&atilde;o Componentes SVG da paleta e, a seguir, arraste e solte os componentes do Formul&aacute;rio SVG para a tela de desenho da visualiza&ccedil;&atilde;o Fluxo e use o menu contextual exibido ao clicar com o bot&atilde;o direito do mouse para renome&aacute;-los como <code>employeeForm</code> e </code>employeeList<code>.
<p class="align-center"><a href="../../../images_www/articles/71/mobility/svgtouch/ex2_6.png" rel="lytebox"
title="Dois formul&aacute;rios SVG adicionados"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex2_6-small.png"
alt="Dois formul&aacute;rios SVG adicionados" border=1></a></p>
</li>
<li>A pr&oacute;xima etapa &eacute; a de conectar as imagens SVG ao c&oacute;digo-fonte. Para conectar os componentes da IU SVG ao c&oacute;digo-fonte, basta arrastar e soltar o arquivo <code>employeeList.svg</code> da janela Projeto para o componente </code>employeeList<code> e repetir esta a&ccedil;&atilde;o para o </code>employeeForm.svg<code> ao arrast&aacute;-lo para o <code>employeeForm</code>.
<p class="align-center"><a href="../../../images_www/articles/71/mobility/svgtouch/ex2_8.png" rel="lytebox"
title="Componentes UI SVG conectados ao c&oacute;digo-fonte"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex2_8-small.png"
alt="Componentes UI SVG conectados ao c&oacute;digo-fonte" border=1></a></p>
</li>
<li>Agora temos que alterar a inst&acirc;ncia do <code>svgButtons</code> para que coincidam com as a&ccedil;&otilde;es que eles executam. Observe que isto n&atilde;o altera o bot&atilde;o IU. Faremos isso mais tarde. Para alterar o nome da inst&acirc;ncia do <code>svgButtons</code>, clique com o bot&atilde;o direito do mouse no bot&atilde;o e selecione renomear a partir do menu contextual. Digite o nome da a&ccedil;&atilde;o que deseja para a inst&acirc;ncia do <code>svgButtons</code> no campo Novo nome da caixa de di&aacute;logo Renomear nome da inst&acirc;ncia.
<p class="notes"><b>Dica</b>: certifique-se de que o novo nome corresponda &agrave; fun&ccedil;&atilde;o do bot&atilde;o IU ao alterar os nomes de inst&acirc;ncias de componentes da IU.</p>
<p class="align-center">
<a href="../../../images_www/articles/71/mobility/svgtouch/ex2_9.png" rel="lytebox"
title="Nomes das inst&acirc;ncias do svgButtons alterados"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex2_9-small.png"
alt="Nomes das inst&acirc;ncias do svgButtons alterados" border=1></a>
</p>
</li>
<li>Na pr&oacute;xima etapa alteraremos as legendas SVG padr&atilde;o dos bot&otilde;es e campos de texto para que correspondam com as informa&ccedil;&otilde;es exibidas pelo aplicativo <strong>ContactBrowser</strong>. Para isso, alterne para a visualiza&ccedil;&atilde;o Tela e exiba <code>employeeForm</code>. A seguir, selecione o item Legenda na visualiza&ccedil;&atilde;o Tela e edite as propriedades de texto de cada legenda e bot&atilde;o para que se pare&ccedil;am com a captura de tela abaixo.
<p class="align-center">
<a href="../../../images_www/articles/71/mobility/svgtouch/ex2_11.png" rel="lytebox"
title="Propriedades do texto para os r&oacute;tulos e bot&otilde;es alteradas"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex2_11-small.png"
alt="Propriedades do texto para os r&oacute;tulos e bot&otilde;es alteradas" border=1></a>
</p> </li>
<li>Tamb&eacute;m precisamos alterar o nome da inst&acirc;ncia dos campos de texto SVG. Clique com o bot&atilde;o direito do mouse em Nome e escolha Renomear a partir do menu contextual e altere o nome para <code>svgTextFieldFirstName</code>. Repita esta etapa para o campo Sobrenome e renomei-o como <code>svgTextFieldLastName</code>.</li>
<li>Agora no menu suspenso da janela do projeto IDE, alterne de <strong>employeeForm</strong> para <strong>employeeList</strong> e renomeie os bot&otilde;es conforme ilustrado na captura de tela abaixo. Voc&ecirc; ver&aacute; as altera&ccedil;&otilde;es no campo texto da janela Propriedades.
<p class="align-center">
<a href="../../../images_www/articles/71/mobility/svgtouch/ex2_11a.png" rel="lytebox"
title="Propriedade do texto dos bot&otilde;es alterada"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex2_11a-small.png"
alt="Propriedade do texto dos bot&otilde;es alterada" border=1></a>
</p> </li>
</ol>
<p class="align-center"><a href="#top">in&iacute;cio</a></p>
<h2><a name="vmdflow"></a>Usando o Visual Mobile Designer para criar o fluxo do aplicativo</h2>
<p>Agora estamos prontos para criar o fluxo do aplicativo usando a visualiza&ccedil;&atilde;o Fluxo do Visual Mobile Designer. </p>
<ol>
<li>Alterne da visualiza&ccedil;&atilde;o Tela para Fluxo no IDE.</li>
<li>Conecte os componentes conforme ilustrado abaixo. Comece por clicar em Iniciado no elemento <strong>Dispositivo m&oacute;vel</strong> e arraste o mouse para o elemento <strong>employeeList</strong>. Repita este m&eacute;todo para fazer as conex&otilde;es dos outros componentes.
<p class="align-center">
<a href="../../../images_www/articles/71/mobility/svgtouch/ex2_12.png" rel="lytebox"
title="Fluxo de aplicativo criado"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex2_12-small.png"
alt="Fluxo de aplicativo criado" border=1></a>
</p>
</li>
</ol>
<p>Na visualiza&ccedil;&atilde;o C&oacute;digo-fonte voc&ecirc; poder&aacute; ver o mecanismo que vincula os fragmentos do Componente da IU SVG XML com as bibliotecas de tempo de execu&ccedil;&atilde;o do Java ME. No exemplo abaixo voc&ecirc; pode ver como os fragmentos do Bot&atilde;o SVG s&atilde;o vinculados com objetos Java ME. O Componente SVG &eacute; reconhecido com base na ID do fragmento XML que, neste exemplo, &eacute; <code>button_0</code>.</p>
<p class="align-center"><img src="../../../images_www/articles/71/mobility/svgtouch/ex2_14.png"></p>
<h3>Executando o aplicativo</h3>
<p>Antes de adicionar a l&oacute;gica do aplicativo, devemos testar a IU Contact Browser no emulador.</p>
<p>No menu, escolha Executar projeto principal (F6) e, ap&oacute;s o emulador ser iniciado, voc&ecirc; poder&aacute; ver e testar sua IU. N&oacute;s ainda n&atilde;o implementamos a l&oacute;gica do aplicativo, mas voc&ecirc; pode verificar se a IU &eacute; exibida como esperado com base no trabalho feito no Visual Mobile Designer.</p>
<p class="align-center"><a href="#top">in&iacute;cio</a></p>
<h2><a name="applogic"></a>Adicionando a l&oacute;gica do aplicativo &agrave; interface de usu&aacute;rio SVG</h2>
<p>Agora podemos usar o Visual Mobile Designer para criar a l&oacute;gica do aplicativo para a IU que criamos na etapa anterior. Usaremos alguns componentes e m&eacute;todos adicionais e finalizaremos ao executar o aplicativo no emulador Java ME SDK 3.0.</p>
<a name="background"></a>
<h3>Informa&ccedil;&otilde;es b&aacute;sicas</h3>
<ul>
<li><strong>SVG ListModel</strong>: define os componentes do m&eacute;todo como o que o SVGList usa para obter o valor de cada c&eacute;lula em uma lista e para calcular o n&uacute;mero de c&eacute;lulas necess&aacute;rias para o exibir. Logicamente, o modelo &eacute; um vetor. Os &iacute;ndices variam de <tt>0</tt> a <tt>ListDataModel.getSize() - 1</tt>. Qualquer altera&ccedil;&atilde;o no conte&uacute;do do comprimento dos dados precisa ser reportada para todos os SVGListDataListeners. Se j&aacute; estiver familiarizado com o modelo JList do Swing, o SVGListModel deveria ser f&aacute;cil de ser entendido.</li>
<li><strong>Componente do ponto de entrada</strong>: o componente do ponto de entrada nos permite representar um m&eacute;todo em uma classe projetada. Este m&eacute;todo cont&eacute;m o c&oacute;digo especificado por uma a&ccedil;&atilde;o atribu&iacute;da a ele, o pino &quot;Entrada chamada&quot;. Este m&eacute;todo &eacute; muito &uacute;til quando for necess&aacute;rio executar o c&oacute;digo ao alternar entre telas do aplicativo ou, em nosso caso, para mostrar a l&oacute;gica do SVGButton na visualiza&ccedil;&atilde;o Fluxo de um Visual Midlet.</li>
</ul>
<a name="creatingsvg"></a>
<h3>Criando um modelo SVGList personalizado</h3>
<p> Nesta etapa criaremos nossa pr&oacute;pria implementa&ccedil;&atilde;o do SVGListModel. Nossa implementa&ccedil;&atilde;o do SVGListModel &eacute; uma classe an&ocirc;nima dentro do m&eacute;todo <code>getSvgList</code>.</p>
<ol>
<li> Use o Navegador (Ctrl+7 se j&aacute; n&atilde;o estiver exibido) para encontrar o elemento <code>getSvgList</code> dentro do elemento <code>employeeList</code> ao clicar com o bot&atilde;o direito do mouse e escolher Ir para o c&oacute;digo-fonte a partir do menu contextual.</li>
<li>Dentro do m&eacute;todo <code>getSVGList</code> adicione o seguinte c&oacute;digo ap&oacute;s <code>svgList = new SVGList(getEmployeeList(), &quot;list_0&quot;);</code>:<br>
<pre class="examplecode">
//Criando e adicionando novo SVListModel com classe an&ocirc;nima. Implementation of ListModel
svgList.setModel(new SVGList.ListModel() {
//Getting contact data as Vector from class EmployeeData
Vector data = EmployeeData.getData();
/**
* Method returns combination of strings: First Name + Last Name
* @return Employee name as String
*/
public Object getElementAt(int index) {
//Getting First Name String
String firstName = ((Employee) data.elementAt(index)).getFirstName();
//Getting Last Name String
String lastName = ((Employee) data.elementAt(index)).getLastName();
return firstName + &quot; &quot; + lastName;
}
/**
* Number of employees
* @return number of employees
*/
public int getSize() {
return data.size();
}
//not used
public void addDataListener(DataListener listener) { }
//not used
public void removeDataListener(DataListener listener) { }
});</pre></li>
</ol>
<p class="notes"><b>Nota:</b> Voc&ecirc; pode usar o recurso de conclus&atilde;o de c&oacute;digo no IDE e digitar voc&ecirc; mesmo o c&oacute;digo.</p>
<a name="nextprevious"></a>
<h3>L&oacute;gica dos bot&otilde;es Avan&ccedil;ar e Voltar</h3>
<p>Nesta etapa adicionaremos a l&oacute;gica aos SVGButtons que fazem parte do <code>employeeForm</code>. Estes bot&otilde;es permitem que os usu&aacute;rios do aplicativo naveguem atrav&eacute;s dos dados do funcion&aacute;rio. Ao clicar em Avan&ccedil;ar, o usu&aacute;rio pode ir para o pr&oacute;ximo Contato do funcion&aacute;rio. Ao pressionar o bot&atilde;o Voltar, o usu&aacute;rio dever&aacute; ver o registro do funcion&aacute;rio anterior. Nesta etapa usaremos o elemento Ponto de entrada, anteriormente descrito.</p>
<ol>
<li>Alterne para a visualiza&ccedil;&atilde;o Fluxo e adicione dois componentes Ponto de entrada da categoria Fluxo da paleta. Clique com o bot&atilde;o direito do mouse nos componentes e renomeie-os como </tt>nextMethod<tt> e <tt>previousMethod</tt> como ilustrado abaixo:
<p class="align-center">
<a href="../../../images_www/articles/71/mobility/svgtouch/ex3_1.png" rel="lytebox"
title="Fluxo de SVGButtons criado"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex3_1-small.png"
alt="Fluxo de SVGButtons criado" border=1></a>
</p>
</li>
<li> Agora temos que adicionar um &iacute;ndice de propriedade de inteiro privado global ao Visual MIDlet. Vamos alternar para a visualiza&ccedil;&atilde;o C&oacute;digo-fonte e adicionar o seguinte no bloco protegido Campos gerados:<br>
<pre class="examplecode">private int index = 0;</pre></li>
<li>Agora precisamos adicionar a l&oacute;gica para atualizar a IU no <code>employeeForm</code>. O m&eacute;todo usado aqui atualiza os elementos da IU SVG no componente <code>employeeForm</code>. No editor de c&oacute;digo-fonte, no fim da classe, adicione o seguinte m&eacute;todo:
<p class="notes"><b>Observa&ccedil;&atilde;o:</b> voc&ecirc; pode usar o recurso de conclus&atilde;o de c&oacute;digo no IDE para inserir o c&oacute;digo.</p>
<pre class="examplecode">
//**O m&eacute;todo &eacute; respons&aacute;vel pelo preenchimento do formul&aacute;rio da UI de funcion&aacute;rios com informa&ccedil;&otilde;es dos funcion&aacute;rios.
private void updateEmployeeFormUI() {
//Getting currently selected employee
final Employee employee = (Employee) EmployeeData.getData().elementAt(index);
//Setting First Name
getSvgTextFieldFirstName().setText(employee.getFirstName());
//Setting Last Name
getSvgTextFieldLastName().setText(employee.getLastName());
//Setting Gender
if (employee.getGender()) {
getSvgRadioButton().setSelected(false);
getSvgRadioButton1().setSelected(true);
} else {
getSvgRadioButton().setSelected(true);
getSvgRadioButton1().setSelected(false);
}
//Setting age
getSvgSpinner().getModel().setValue(new Integer(employee.getAge()));
}
</pre>
<p>Agora podemos come&ccedil;ar a adicionar a l&oacute;gica ao <tt>nextMethod</tt> e ao <tt>previousMethod</tt>.</p></li>
<li>Alterne para a visualiza&ccedil;&atilde;o Fluxo, clique com o bot&atilde;o direito do mouse no Ponto de entrada <code>nextMethod</code> e escolha a op&ccedil;&atilde;o Ir para o c&oacute;digo-fonte a partir do menu suspenso.</li>
<li>No editor de c&oacute;digo-fonte, adicione o c&oacute;digo seguinte ao m&eacute;todo<tt>nextMethod()</tt> antes de <tt>switchDisplayable(null, getEmployeeForm().getSvgCanvas());</tt>. Este c&oacute;digo exibe o pr&oacute;ximo registro na fila dos registros de dados de funcion&aacute;rios. Ele tamb&eacute;m chama a IU para atualizar as informa&ccedil;&otilde;es exibidas.<br>
<pre class="examplecode">// Move to the next Employee record
if (index &lt; EmployeeData.getData().size() - 1) {
//Update index.
index++;
}
//Update UI - employee form
updateEmployeeFormUI();
//Go back to employeeForm
</pre></li>
<li>Alterne para a visualiza&ccedil;&atilde;o Fluxo, clique com o bot&atilde;o direito do mouse no Ponto de entrada <code>previousMethod</code> e escolha a op&ccedil;&atilde;o Ir para o c&oacute;digo-fonte a partir do menu suspenso.</li>
<li>No editor de c&oacute;digo-fonte, adicione o c&oacute;digo seguinte ao m&eacute;todo <tt>previousMethod()</tt> antes de <tt>switchDisplayable(null, getEmployeeForm().getSvgCanvas());</tt> para habilitar a funcionalidade de navega&ccedil;&atilde;o de dados ao trabalho.<br>
<pre class="examplecode">// Move to the previous Employee record
if (index &gt; 0) {
//Update index
index--;
}
//Update UI
updateEmployeeFormUI();
//Go back to employeeForm
</pre>
<p>A seguir, precisamos garantir que a IU ser&aacute; atualizada quando <code>employeeForm</code> e o &iacute;ndice global definido com base em uma sele&ccedil;&atilde;o forem feitos na lista de funcion&aacute;rios.</p></li>
<li>Alterne para a visualiza&ccedil;&atilde;o Fluxo e clique com o bot&atilde;o direito do mouse no bot&atilde;o <tt>selecionar</tt> em <code>employeeList</code> e escolha a op&ccedil;&atilde;o Ir para o c&oacute;digo-fonte a partir do menu contextual.</li>
<li>No editor de c&oacute;digo-fonte, adicione o c&oacute;digo seguinte ao m&eacute;todo <code>getSelect()</code> depois de <tt>public void actionPerformed(SVGComponent svgComponent) {</tt>:<br>
<pre class="examplecode"> //Updating global index
index = getSvgList().getSelectionModel().getSelectedIndex();
//Updating UI after selection has been made
updateEmployeeFormUI();
//Switching to the employeeForm</pre></li>
</ol>
<p class="align-center"><a href="#top">in&iacute;cio</a></p>
<h2><a name="uitest"></a>Testando o aplicativo em um emulador de dispositivo de tela por toque</h2>
<p>Estamos prontos para testar nosso aplicativo no Java ME SDK 3.0 <strong>DefaultFxTouchPhone1</strong> que vem embutido no instalador do NetBeans IDE. Para poder iniciar o aplicativo , precisamos editar as Propriedades do projeto.</p>
<ol>
<li>Clique com o bot&atilde;o direito do mouse no n&oacute; do projeto e escolha Propriedades no menu contextual. Na caixa de di&aacute;logo Projeto, em Categoria, escolha Plataforma e, a seguir, escolha Java Platform Micro Edition SDK 3.0 no menu suspenso Plataforma do emulador.</li>
<li>Para uma emula&ccedil;&atilde;o de dispositivo de tela por toque, selecione DefaultFxTouchPhone1 no menu suspenso Dispositivo e CLDC-1.1 como Dispositivo de configura&ccedil;&atilde;o como ilustrado abaixo e clique em OK.
<p class="align-center">
<a href="../../../images_www/articles/71/mobility/svgtouch/ex4_4.png" rel="lytebox"
title="Dispositivo e plataforma do emulador selecionados"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex4_4-small.png"
alt="Dispositivo e plataforma do emulador selecionados" border=1></a>
</p>
</li>
<li>Acesse Executar &gt; Executar projeto e o aplicativo ser&aacute; iniciado no emulador. &Eacute; poss&iacute;vel verificar se as propriedades da tela sens&iacute;vel ao toque est&atilde;o ativadas colocando o ponteiro do mouse sobre os componentes SVG. &Eacute; poss&iacute;vel mover cursor do mouse pela tela para navegar pelos menus do aplicativo como um usu&aacute;rio faria com o a ponta do dedo.</li>
<li>No emulador, podemos executar alguns testes b&aacute;sicos da IU, como o uso do bot&atilde;o Voltar ou Avan&ccedil;ar, para verificar se os elementos da IU est&atilde;o funcionando corretamente.
<p class="align-center">
<a href="../../../images_www/articles/71/mobility/svgtouch/ex4_5.png" rel="lytebox"
title="Aplicativo executado no emulador"> <img src="../../../images_www/articles/71/mobility/svgtouch/ex4_5-small.png"
alt="Aplicativo executado no emulador" border=1></a>
</p> </li>
</ol>
<h2>Resumo<a name="summary"></a></h2>
<p> Neste tutorial, voc&ecirc; aprender&aacute; como criar uma IU habilitada para tela sens&iacute;vel ao toque com base em SVG para dispositivos JavaME usando o NetBeans IDE.</p>
<p class="align-center"><a href="#top">in&iacute;cio</a></p>
<div class="feedback-box"><a href="/about/contact_form.html?to=6&subject=Creating%20a%20Touch%20Enabled%20SVG%20UI%20for%20Java%20ME%20Devices">Envie-nos seus coment&aacute;rios</a></div>
<br style="clear:both;" >
<a name="see-also"></a>
<h2>Consulte tamb&eacute;m</h2>
<ul>
<li><a href="http://wiki.netbeans.org/MobilityDesignerRichComponents">Refer&ecirc;ncia de componentes de IU SVG ricos</a></li>
<li><a href="http://blogs.sun.com/kharezlak/entry/playing_with_svg_components_in">Aplicativo IU SVG rico</a></li>
<li><a href="http://wiki.netbeans.org/MobilitySVGComponents">Usando componentes de IU SVG ricos</a></li>
<li><a href="http://wiki.netbeans.org/VisualMobileDesignerPalatteReference">Refer&ecirc;ncia: Guia da paleta do Visual Mobile Designer</a></li>
<li><a href="../../../kb/trails/mobility.html">Trilha do aprendizado dos aplicativos Java ME no NetBeans</a></li>
</ul>
<p class="align-center"><a href="#top">in&iacute;cio</a></p>
</body>
</HTML>