<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Introdu&ccedil;&atilde;o &agrave; Plataforma NetBeans para Plataformas NetBeans 6.8</title>
    <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="AUDIENCE" content="NBUSER">
    <meta name="TYPE" content="ARTICLE">
    <meta name="EXPIRES" content="N">
    <meta name="developer" content="gwielenga@netbeans.org">
    <meta name="indexed" content="y">
    <meta name="description"
          content="A short guide to getting started with the NetBeans Platform.">
</head>
<body>

   <h1>In&iacute;cio r&aacute;pido da Plataforma NetBeans</h1>

   <p>Bem-vindo &agrave; <a href="https://platform.netbeans.org/"><b>Plataforma NetBeans</b></a>!

   <p>A principal vantagem da plataforma NetBeans &eacute; sua arquitetura modular. A segunda vantagem &eacute; a depend&ecirc;ncia da plataforma NetBeans do kit de ferramentas Swing UI, que &eacute; o kit de ferramentas oficial para criar interfaces do usu&aacute;rio no Java, em combina&ccedil;&atilde;o com o premiado construtor de GUI &quot;Matisse&quot;.
   
   <p>Nesta introdu&ccedil;&atilde;o, voc&ecirc; &eacute; apresentado &agrave;s vantagens e ao uso da modularidade atrav&eacute;s de um exemplo bem simples, contribu&iacute;do por Thomas W&uuml;rthinger, que no momento &eacute; um aluno PhD na Universidade Johannes Kepler em Linz, &Aacute;ustria. Ap&oacute;s ter compreendido os conceitos apresentados nesta introdu&ccedil;&atilde;o, voc&ecirc; estar&aacute; pronto para entrar na <a href="https://netbeans.org/kb/trails/platform_pt_BR.html">Trilha de aprendizado da plataforma NetBeans</a>, que fornece uma rica variedade de tutoriais para muitos diferentes cen&aacute;rios relativos &agrave; plataforma NetBeans.

<p class="tips"> Caso seja novo na plataforma NetBeans, recomenda-se com &ecirc;nfase que voc&ecirc; assista &agrave; s&eacute;rie de screencasts <a href="https://platform.netbeans.org/tutorials/nbm-10-top-apis.html">As 10 principais APIs do NetBeans</a>.

   <p><b>Conte&uacute;do</b></p>
   <img  src="../images/articles/68/netbeans-stamp-65-67-68.gif" class="stamp" width="114" height="114" alt="O conte&uacute;do desta p&aacute;gina se aplica ao NetBeans IDE 6.5, 6.7, 6.8" title="O conte&uacute;do desta p&aacute;gina se aplica ao NetBeans IDE 6.5, 6.7, 6.8"> </p>
      <ul class="toc">
        <li><a href="#single">Um m&oacute;dulo &uacute;nico do aplicativo da plataforma NetBeans</a></li>
        <li><a href="#lookup">Um aplicativo modular usando a pesquisa</a>
        <li><a href="#listener">LookupListener e InstanceContent</a></li>
      </ul>
         
<p><b>Para seguir este tutorial, voc&ecirc; preciso dos softwares e recursos listados na tabela seguinte.</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</a></td>
                <td class="tbltd1">vers&atilde;o 6.5 ou superior</td>
            </tr>
            <tr>
                <td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Java Developer Kit (JDK)</a></td>
                <td class="tbltd1">Vers&atilde;o 6 ou<br/>vers&atilde;o 5</td>
            </tr>
        </tbody>
    </table>
 
    <p><b class="notes">Observa&ccedil;&atilde;o:</b> embora seja um produto separado, n&atilde;o &eacute; necess&aacute;rio baixar a plataforma NetBeans separadamente. Normalmente, voc&ecirc; desenvolver&aacute; o aplicativo no IDE e, em seguida, excluir&aacute; os m&oacute;dulos espec&iacute;ficos do IDE, mas que s&atilde;o sup&eacute;rfluos para a seu aplicativo.
    
    <!-- ===================================================================================== -->
 
    <h2 class="tutorial"><a name="single"></a>Um m&oacute;dulo &uacute;nico do aplicativo da plataforma NetBeans</h2>
    
    <p>Come&ccedil;amos criando um novo aplicativo da plataforma NetBeans, contendo um &uacute;nico m&oacute;dulo.
                
    <ol>

         <p><li>Escolha Arquivo | Novo projeto e, a seguir, escolha M&oacute;dulos do NetBeans. Selecione &quot;Aplicativo da plataforma NetBeans&quot;. O seguinte dever&aacute; ser exibido:</p>
         <p><p align="left"><img border="1" src="../images/tutorials/quickstart-platform/wordapp01.png" alt="Fig 1">
         <p>Clique em Pr&oacute;ximo.</p>
         
         <p><li>Nomeie seu novo aplicativo como &quot;WordApp&quot; e torne-o o projeto principal do IDE:</p>
         <p><p align="left"><img border="1" src="../images/tutorials/quickstart-platform/wordapp02.png" alt="Fig 2">
         <p class="tips"> O projeto principal do IDE &eacute; iniciado quando o comando &quot;Executar projeto&quot; do projeto global &eacute; chamado.</p>
         <p>Clique em Terminar.</p>

         <p><li>Expanda o novo aplicativo na janela Projetos, clique com o bot&atilde;o direito do mouse no n&oacute; M&oacute;dulos e escolha &quot;Adicionar novo&quot;. Nomeie o novo m&oacute;dulo como &quot;WordEngine&quot;:</p>
          <p><p align="left"><img border="1" src="../images/tutorials/quickstart-platform/wordapp03.png"/>
         <p>Clique em Pr&oacute;ximo.</p>

         <p><li>Especifique um nome &uacute;nico para o m&oacute;dulo, que &eacute; o nome do c&oacute;digo-base, assim como um nome que ser&aacute; exibido na janela Projetos:</p>
          <p><p align="left"><img border="1" src="../images/tutorials/quickstart-platform/wordapp04.png"/>
          <p>Clique em Terminar. O novo m&oacute;dulo &eacute; criado e sua estrutura &eacute; mostrada na janela Projetos.

         <p><li>Clique com o bot&atilde;o direito no m&oacute;dulo &quot;WordEngine&quot; e escolha Novo | Outro. Na categoria Desenvolvimento de m&oacute;dulo selecione &quot;Componente da janela&quot;:
         <p><img border="1" src="../images/tutorials/quickstart-platform/wordapp05.png"/>

         <p><p>Clique em Pr&oacute;ximo. O seguinte dever&aacute; ser exibido:</p>
         <p><img border="1" src="../images/tutorials/quickstart-platform/wordapp06.png"/>
         <p>Clique em Pr&oacute;ximo.</p>

         <p><li>Defina o prefixo do nome da classe como &quot;Texto&quot; e o pacote como &quot;org.demo.wordengine&quot;:</p>
         <p><img border="1" src="../images/tutorials/quickstart-platform/wordapp07.png"/>
         <p>Clique em Terminar. A nova janela &eacute; adicionada na estrutura do c&oacute;digo-fonte de seu m&oacute;dulo junto com alguns arquivos XML subjacentes.</p>

         <p><li>Agora, clique no arquivo &quot;TextTopComponent.java&quot; para abrir a visualiza&ccedil;&atilde;o Projetar do construtor de GUI &quot;Matisse&quot;. Use a Paleta (Ctrl-Shift-8) para arrastar e soltar um bot&atilde;o e uma &aacute;rea de texto na janela:</p>

         <p><img border="1" src="../images/tutorials/quickstart-platform/wordapp15.png"/>

         <p>Clique com o bot&atilde;o direito do mouse na &aacute;rea de texto, escolha &quot;Alterar nome da vari&aacute;vel&quot; e, a seguir, a nomeie como &quot;texto&quot;. Este &eacute; o nome que permitir&aacute; o acesso ao componente de seu c&oacute;digo. Selecione o texto do bot&atilde;o para &quot;Filtrar&quot;.
          
         <p><li>Clique duas vezes no bot&atilde;o, fazendo com que um m&eacute;todo de manipula&ccedil;&atilde;o de eventos seja automaticamente criado no editor de c&oacute;digo-fonte. Este m&eacute;todo &eacute; chamado sempre que se clica no bot&atilde;o. Substitua o corpo do m&eacute;todo pelo seguinte c&oacute;digo.</p>
<p><pre class="examplecode">private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
   String s = text.getText();
   s = s.toUpperCase();
   text.setText(s);
}</pre>

         <p><li>Clique com o bot&atilde;o direito do mouse no aplicativo e escolha Executar. Fazendo isso, seu novo aplicativo da plataforma NetBeans ser&aacute; iniciado e o m&oacute;dulo ser&aacute; instalado. Seu novo aplicativo deveria se parecer com o seguinte:</p>
         <p><img border="1" src="../images/tutorials/quickstart-platform/wordapp08.png"/>

         <p><li>Escolha Janela | Texto, insira um texto na &aacute;rea de texto e clique em &quot;Filtrar!&quot;. Voc&ecirc; dever&aacute; ver que o texto agora &eacute; mostrado em mai&uacute;sculas.</p>
         <p><img border="1" src="../images/tutorials/quickstart-platform/wordapp09.png"/>

    </ol>

<p>Voc&ecirc; aprendeu como criar um novo aplicativo da plataforma NetBeans e como adicionar novos m&oacute;dulos no mesmo.

    <!-- ===================================================================================== -->

    <h2 class="tutorial"><a name="lookup"></a>Um aplicativo modular usando a pesquisa</h2>

    <p>Criamos dois m&oacute;dulos adicionais. O primeiro novo m&oacute;dulo define um servi&ccedil;o, que o segundo m&oacute;dulo fornece para o m&oacute;dulo que definimos na se&ccedil;&atilde;o anterior.

    <ol>
         <p><li>Expanda o novo aplicativo na janela Projetos, clique com o bot&atilde;o direito do mouse no n&oacute; M&oacute;dulos e escolha &quot;Adicionar novo&quot;. Nomeie o novo m&oacute;dulo como &quot;TextFilter&quot;, com o nome de c&oacute;digo-base &quot;org.demo.textfilter&quot;, complete o assistente, que adiciona o m&oacute;dulo no aplicativo anteriormente criado, como fez na se&ccedil;&atilde;o anterior.</p>

         <p><li>Clique com o bot&atilde;o direito no m&oacute;dulo &quot;TextFilter&quot; e escolha Novo | Interface do Java. Nomeie a interface do Java como &quot;TextFilter&quot;, no pacote &quot;org.demo.textfilter&quot;, e use o editor para o defini-la da seguinte forma:

<p><pre class="examplecode">package org.demo.textfilter;

public interface TextFilter {

    String process(String s);

}
</pre>

         <p><li>Clique com o bot&atilde;o direito do mouse no m&oacute;dulo &quot;TextFilter&quot;, escolha Propriedades e use a aba &quot;Vers&atilde;o de API&quot; para especificar que o pacote contendo a interface deveria estar dispon&iacute;vel atrav&eacute;s do aplicativo:</p>

         <p><img border="1" src="../images/tutorials/quickstart-platform/fig-10.png"/>

         <p><li>Crie um terceiro m&oacute;dulo em seu aplicativo, nomeie o mesmo como &quot;MyFilter&quot;, com &quot;org.demo.myfilter&quot; como o nome do c&oacute;digo-base.</p>

         <p><li>Adicione uma depend&ecirc;ncia na caixa de di&aacute;logo propriedades do projeto do m&oacute;dulo &quot;MyFilter&quot; rec&eacute;m-criado para o m&oacute;dulo &quot;TextFilter&quot;:</p>

         <p><img border="1" src="../images/tutorials/quickstart-platform/fig-11.png"/>
         
         <p><li>Por causa da depend&ecirc;ncia acima definida, voc&ecirc; agora pode implementar a interface definida no segundo m&oacute;dulo:

<p><pre class="examplecode">package org.demo.myfilter;

import org.demo.textfilter.TextFilter;

@ServiceProvider(service=TextFilter.class)
public class UpperCaseFilter implements TextFilter {

    public String process(String s) {
        return s.toUpperCase();
    }

}</pre>
    <p>No momento da compila&ccedil;&atilde;o, a anota&ccedil;&atilde;o @ServiceProvider criar&aacute; uma pasta META-INF/services com um arquivo que registra a sua implementa&ccedil;&atilde;o da interface TextFilter, seguido do mecanismo ServiceLoader do JDK 6. &Eacute; necess&aacute;rio definir uma depend&ecirc;ncia no m&oacute;dulo API de utilit&aacute;rios, que proporciona a anota&ccedil;&atilde;o ServiceProvider.
         
         <p><li>O c&oacute;digo que manuseia um clique no bot&atilde;o Filtrar agora precisa ser modificado, para que um implementador da interface &quot;TextFilter&quot; seja localizado e carregado. Quando tal implementador &eacute; encontrado, ele &eacute; chamado para filtrar o texto.</p>
        <p>Antes de poder fazer isso, precisamos adicionar uma depend&ecirc;ncia na caixa de di&aacute;logo Propriedades do projeto do m&oacute;dulo &quot;WordEngine&quot; para o m&oacute;dulo &quot;TextFilter&quot;:</p>

        <p><img src="../images/tutorials/quickstart-platform/wordapp12.png"/>

<p>Agora, voc&ecirc; pode carregar as implementa&ccedil;&otilde;es da classe &quot;TextFilter&quot;, conforme ilustrado abaixo:</p>

<p><pre class="examplecode">private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    String s = text.getText();
    <b>TextFilter filter = Lookup.getDefault().lookup(TextFilter.class)</b>;
    if (filter != null) {
	 s = filter.process(s);
    }
    text.setText(s);
}</pre>

         <p class="tips"> O acima deveria ser feito atrav&eacute;s da classe &quot;ServiceLoader&quot; do JDK 6, com exce&ccedil;&atilde;o que a classe &quot;Lookup&quot; pode ser usada em JDK's anteriores ao JDK 6. Al&eacute;m disso, a classe &quot;Lookup&quot; tem um n&uacute;mero de recursos adicionais, como ser&aacute; ilustrado na pr&oacute;xima se&ccedil;&atilde;o.</p>

    </ol>

     <p>Agora voc&ecirc; est&aacute; pronto para executar o c&oacute;digo e verificar que tudo funciona como antes. Apesar da funcionalidade ser a mesma, o novo projeto modular oferece uma separa&ccedil;&atilde;o clara entre a interface gr&aacute;fica do usu&aacute;rio e a implementa&ccedil;&atilde;o do filtro. O novo aplicativo tamb&eacute;m pode ser estendido com facilidade, bastando adicionar novos provedores de servi&ccedil;os no classpath do aplicativo.</p>

<p>Como um exerc&iacute;cio, voc&ecirc; altera o c&oacute;digo, para que todos os filtros de texto ALL encontrados (use o m&eacute;todo &quot;lookupAll&quot;) sejam aplicados consecutivamente no texto. Por exemplo, adicione uma implementa&ccedil;&atilde;o de filtro de texto que remove todos os espa&ccedil;os em branco e a seguir teste o aplicativo resultante.</p>
    
    <!-- ===================================================================================== -->

    <h2 class="tutorial"><a name="listener"></a>LookupListener e InstanceContent</h2>

    <p>Criamos um quarto m&oacute;dulo que recupera de forma din&acirc;mica o texto sempre que clicamos no bot&atilde;o &quot;Filtrar!&quot; em nosso primeiro m&oacute;dulo.

    <ol>
         <p><li>No primeiro m&oacute;dulo, altere o construtor do &quot;TextTopComponent&quot; como segue:</p>

<p><pre class="examplecode"><b>private InstanceContent content;</b>

private TextTopComponent() {
    initComponents();
    setName(NbBundle.getMessage(TextTopComponent.class, &quot;CTL_TextTopComponent&quot;));
    setToolTipText(NbBundle.getMessage(TextTopComponent.class, &quot;HINT_TextTopComponent&quot;));
//        setIcon(Utilities.loadImage(ICON_PATH, true));

    <b>content = new InstanceContent();
    associateLookup(new AbstractLookup(content));</b>

}</pre>

         <p><li>Altere o c&oacute;digo do bot&atilde;o filtro para que o valor antigo seja adicionado ao objeto <tt>InstanceContent</tt> quando o bot&atilde;o &eacute; clicado.</p>

<p><pre class="examplecode">private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    String s = text.getText();
    TextFilter filter = Lookup.getDefault().lookup(TextFilter.class);
    if (filter != null) {
        <b>content.add(s);</b>
        s = filter.process(s);
    }
    text.setText(s);
}</pre>

         <p><li>Crie um novo m&oacute;dulo denominado &quot;History&quot; com o nome de c&oacute;digo-base de &quot;com.demo.history&quot;.
         <p><li>No m&oacute;dulo History, crie um novo componente da janela com o prefixo &quot;History&quot;, no pacote &quot;com.demo.history&quot;. Especifique que ele deveria aparecer na posi&ccedil;&atilde;o &quot;editor&quot;. Ap&oacute;s ter criado a janela, adicione um &aacute;rea de texto na mesma. Altere o nome da vari&aacute;vel da &aacute;rea de texto para &quot;historyText&quot;.</p>
         
         <p><li>Adicione c&oacute;digo ao construtor da classe HistoryTopComponent para que ou&ccedil;a a pesquisa da classe <tt>String</tt> da janela no momento ativa. Ele exibe todos os objetos <tt>String</tt> recuperados na &aacute;rea de texto:</p>

<p><pre class="examplecode"><b>private Lookup.Result result;</b>

private HistoryTopComponent() {

    ...

    <b>result = org.openide.util.Utilities.actionsGlobalContext().lookupResult(String.class);
    result.addLookupListener(new LookupListener() {
        public void resultChanged(LookupEvent e) {
            historyText.setText(result.allInstances().toString());
        }
    });</b>
}</pre>

     <p><li>Voc&ecirc; pode ent&atilde;o iniciar o aplicativo e experiment&aacute;-lo. O resultado deveria parecer similar ao mostrado na captura de tela abaixo:</p>

<p><img border="1" src="../images/tutorials/quickstart-platform/wordapp13.png"/>

<p>Como um exerc&iacute;cio, voc&ecirc; pode alterar o tipo de resultado da pesquisa de <tt>String</tt> para <tt>Object</tt> e ver o que acontece quando seleciona diferentes janelas.</p>

 </ol>

<p>Parab&eacute;ns! Neste est&aacute;gio, como apenas alguma codifica&ccedil;&atilde;o, voc&ecirc; criou um pequeno exemplo de um aplicativo modular:

 <p><img border="1" src="../images/tutorials/quickstart-platform/wordapp14.png"/>

<p>O aplicativo consiste em 4 m&oacute;dulos. O c&oacute;digo de um m&oacute;dulo pode ser usado por outro m&oacute;dulo se (1) o primeiro m&oacute;dulo explicitamente exp&otilde;e pacotes e (2) o segundo m&oacute;dulo define a depend&ecirc;ncia sobre o primeiro m&oacute;dulo. Desta forma, a plataforma NetBeans ajuda a organizar seu c&oacute;digo em uma arquitetura modular estrita, assegurando que o c&oacute;digo n&atilde;o seja reutilizado de forma aleat&oacute;ria, mas somente quando h&aacute; contratos definidos entre os m&oacute;dulos que fornecem o c&oacute;digo.</p><p>Em segundo lugar, a classe <tt>Lookup</tt> foi introduzida como um mecanismo para a comunica&ccedil;&atilde;o entre os m&oacute;dulos, como uma extens&atilde;o da abordagem JDK 6 ServiceLoader. As implementa&ccedil;&otilde;es s&atilde;o carregadas atrav&eacute;s de suas interfaces. Sem usar qualquer c&oacute;digo de um implementa&ccedil;&atilde;o, o m&oacute;dulo &quot;WordEngine&quot; &eacute; capaz de exibir o servi&ccedil;o fornecido pelo implementador. O acoplamento fraco &eacute; fornecido desta forma para a plataforma NetBeans.</p>

<p class="tips"> Para saber mais sobre a modularidade e sobre a plataforma NetBeans, v&aacute; para a 4&ordf; parte das s&eacute;ries &quot;Gerenciamento de sele&ccedil;&atilde;o da plataforma NetBeans&quot;, <a href="https://platform.netbeans.org/tutorials/nbm-selection-1.html">que come&ccedil;a aqui</a>. Ap&oacute;s isso, inicie com a <a href="https://netbeans.org/kb/trails/platform_pt_BR.html">Trilha de aprendizado da plataforma NetBeans</a>, escolhendo os tutoriais que sejam mais relevantes para seu cen&aacute;rio administrativo particular. Tamb&eacute;m, sempre que tiver perguntas sobre a plataforma NetBeans, de qualquer tipo, sinta-se a vontade para escrever para a lista de correio, dev@openide.netbeans.org, seu arquivo relacionado <a href="https://netbeans.org/projects/openide/lists/dev/archive">est&aacute; aqui</a>.</p>

 <p>Divirta-se com a plataforma NetBeans e nos veremos na lista de correio!</p>

 

</body>

</html>
