blob: 7d625f94076ae0f05803dc03a2586cde77d06000 [file] [log] [blame]
<!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>
<!-- -*- xhtml -*- -->
<title>Tutorial de integra&ccedil;&atilde;o de tipo de arquivo para a plataforma NetBeans 6.5</title>
<link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"/>
<meta name="AUDIENCE" content="NBUSER"/>
<meta name="TYPE" content="ARTICLE"/>
<meta name="EXPIRES" content="N"/>
<meta name="developer" content="gwielenga@netbeans.org"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="indexed" content="y"/>
<meta name="description"
content="A short guide to using the DataLoader API, as well as other APIs
relating to file support."/>
<!-- Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. -->
<!-- Use is subject to license terms.-->
</head>
<body>
<h1>Tutorial de integra&ccedil;&atilde;o de tipo de arquivo</h1>
<p>Este tutorial mostra como gravar um m&oacute;dulo que permite que o IDE, ou qualquer outro aplicativo constru&iacute;do na Plataforma NetBeans, reconhe&ccedil;a um novo tipo de arquivo.</p>
<p><b class="notes">Nota:</b> este documento usa a vers&atilde;o NetBeans IDE 6.5. Se voc&ecirc; estiver utilizando o NetBeans IDE 6.x, consulte <a href="60/nbm-filetype_pt_BR.html">a vers&atilde;o 6.1 deste documento</a>.</p>
<p><b>Conte&uacute;do</b></p>
<p><img src="../images/articles/69/netbeans-stamp7-8-9.png" 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="#intro">Introdu&ccedil;&atilde;o &agrave; integra&ccedil;&atilde;o do tipo de arquivo</a></li>
<li><a href="#creating">Criando o projeto do m&oacute;dulo </a></li>
<li><a href="#recognizing">Reconhecendo arquivos Abc</a></li>
<li><a href="#install">Instalando e testando a funcionalidade</a></li>
<li><a href="#adding">Criando recursos para arquivos Abc</a>
<ul>
<li><a href="#action">Adicionando uma a&ccedil;&atilde;o</a></li>
<li><a href="#topcomponent">Abrindo o arquivo em uma janela</a></li>
<li><a href="#multiview">Criando uma janela de m&uacute;ltiplas visualiza&ccedil;&otilde;es</a></li>
</ul></li>
<li><a href="#share">Criando um bin&aacute;rio compartilh&aacute;vel</a></li>
</ul>
<p><b>Para seguir este tutorial, os softwares e recursos listados na tabela seguinte s&atilde;o necess&aacute;rios.</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.7 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>
<h2 class="tutorial"><a name="intro"></a>Introdu&ccedil;&atilde;o &agrave; integra&ccedil;&atilde;o do tipo de arquivo</h2>
<p>Os tipos de arquivo reconhecidos no IDE possuem seus pr&oacute;prios &iacute;cones, itens de menu e comportamento. Os &quot;arquivos&quot; mostrados s&atilde;o <tt>FileObjects</tt> - wrappers em torno de <tt>java.io.File</tt> ou, no caso dos arquivos de configura&ccedil;&atilde;o, geralmente wrappers em torno dos dados armazenados de outra maneira, como em arquivos XML em m&oacute;dulos. O que voc&ecirc; <i>v&ecirc;</i>, na verdade, s&atilde;o <tt>n&oacute;s</tt>, que fornecem funcionalidade como a&ccedil;&otilde;es e nomes localizados a objetos como arquivos. Entre os <tt>n&oacute;s</tt> e os <tt>FileObjects</tt> est&atilde;o os <tt>DataObjects</tt>. Um <tt>DataObject</tt> &eacute; parecido com um <tt>FileObject</tt>, s&oacute; que ele sabe qual tipo de arquivo est&aacute; sendo mostrado e geralmente h&aacute; tipos diferentes de <tt>DataObject</tt> para arquivos com extens&otilde;es diferentes e arquivos XML com namespaces diferentes. Cada <tt>DataObject</tt> &eacute; fornecido por um m&oacute;dulo diferente, cada um implementando suporte para um ou mais tipos de arquivos. Por exemplo, o m&oacute;dulo Imagem permite que sejam reconhecidos e abertos arquivos <tt>.gif</tt> e <tt>.png</tt>.</p>
<p>Um m&oacute;dulo que reconhece um tipo de arquivo instala um <tt>DataLoader</tt>: uma f&aacute;brica para um <tt>DataObject</tt> espec&iacute;fico de um tipo de arquivo. Quando uma pasta &eacute; expandida, o IDE pergunta a cada <tt>DataLoader</tt> conhecido: &quot;voc&ecirc; sabe o que &eacute; isto?&quot; O primeiro que responder &quot;Sim&quot; cria o <tt>DataObject</tt> para o arquivo. Para realmente exibir algo para cada arquivo, o sistema chama <tt>DataObject.getNodeDelegate()</tt> para cada <tt>DataObject</tt> e os <tt>n&oacute;s</tt> s&atilde;o o que voc&ecirc; realmente v&ecirc; no IDE.</p>
<p>Abaixo, o diagrama &agrave; esquerda mostra o que cada item mencionado acima disponibiliza:</p>
<p><img src="../images/tutorials/filetype/diagram-dataobject2.png" alt="Diagrama." /></p>
<p>Neste tutorial, voc&ecirc; criar&aacute; um m&oacute;dulo para instalar um <tt>DataLoader</tt> para arquivos &quot;Abc&quot; imagin&aacute;rios (extens&atilde;o de arquivo <tt>.abc</tt>). Como padr&atilde;o, um arquivo com a extens&atilde;o &quot;abc&quot; &eacute; tratado como qualquer outro arquivo que o IDE n&atilde;o reconhe&ccedil;a: ele &eacute; tratado como um arquivo de texto e, como resultado, o IDE fornece a mesma funcionalidade para os arquivos Abc que fornece para os arquivos de texto. Ap&oacute;s ter criado o m&oacute;dulo, voc&ecirc; saber&aacute; como aprimor&aacute;-lo com funcionalidades que estar&atilde;o dispon&iacute;veis somente para arquivos Abc. Quando voc&ecirc; concluir o ciclo de desenvolvimento, poder&aacute; permitir facilmente que outras pessoas utilizem o seu m&oacute;dulo: o IDE permite a cria&ccedil;&atilde;o de um bin&aacute;rio que pode ser enviado para outras pessoas que poder&atilde;o instal&aacute;-lo atrav&eacute;s da Central de Atualiza&ccedil;&otilde;es.</p>
<!-- ===================================================================================== -->
<h2 class="tutorial"><a name="creating"></a>Criando o projeto do m&oacute;dulo </h2>
<p>Nesta se&ccedil;&atilde;o, utilizaremos um assistente para criar a estrutura de c&oacute;digo-fonte que todo m&oacute;dulo NetBeans precisa. A estrutura do c&oacute;digo-fonte consiste em determinadas pastas em locais espec&iacute;ficos e em um conjunto de arquivos que sempre s&atilde;o necess&aacute;rios. Por exemplo, cada m&oacute;dulo NetBeans requer uma pasta <tt>nbproject</tt>, que cont&eacute;m os metadados do projeto, e um arquivo <tt>layer.xml</tt>, para registro de declara&ccedil;&atilde;o de itens como janelas e bot&otilde;es da barra de ferramentas.</p>
<ol>
<li>Escolha Arquivo &gt; Novo projeto (Ctrl-Shift-N). Em Categorias, selecione M&oacute;dulos do NetBeans. Em Projetos, selecione M&oacute;dulo e clique em Pr&oacute;ximo.</li>
<li>No painel Nome e localiza&ccedil;&atilde;o, digite <tt>AbcFileType</tt> em Nome do projeto. Altere a Localiza&ccedil;&atilde;o do projeto para qualquer diret&oacute;rio no computador, como <tt>c:\meusmodulos</tt>. Deixe o bot&atilde;o de op&ccedil;&atilde;o M&oacute;dulo independente selecionado. O painel agora deve ter esta apar&ecirc;ncia:
<p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/65-projectwizard1.png" alt="Etapa 1 do assistente para Nova Projeto." /></p>
<p>Clique em Pr&oacute;ximo.</p></li>
<li>No painel Configura&ccedil;&atilde;o b&aacute;sica de m&oacute;dulos, digite <tt>org.myorg.abcfiletype</tt> como o Nome base de c&oacute;digo. Adicione espa&ccedil;os ao Nome de exibi&ccedil;&atilde;o do m&oacute;dulo sugerido, para que ele seja alterado para <tt>Tipo de arquivo Abc</tt>. Marque a caixa de verifica&ccedil;&atilde;o &quot;Gerar camada XML&quot; e deixe o pacote de localiza&ccedil;&atilde;o e a camada XML onde est&atilde;o, para que eles sejam armazenados em um pacote com o nome <tt>org/myorg/abcfiletype</tt>. O painel agora deve ter esta apar&ecirc;ncia:
<p><img src="../images/tutorials/filetype/65-projectwizard2.png" alt="Etapa 2 do assistente para Novo projeto" /></p></li>
<li>Clique em Terminar.</li></ol>
<p> O IDE cria o projeto <tt>Tipo de arquivo Abc</tt>. O projeto cont&eacute;m todos os metadados de projeto e c&oacute;digos-fonte, como o script de constru&ccedil;&atilde;o Ant do projeto. O projeto se abre no IDE. Voc&ecirc; pode ver a estrutura l&oacute;gica na janela Projetos (Ctrl-1) e a estrutura de arquivos na janela Arquivos (Ctrl+2). Por exemplo, a janela Projetos agora deve ter esta apar&ecirc;ncia:</p>
<p><img src="../images/tutorials/filetype/65-projectswindow1.png" alt="Janela Projetos iniciais." /></p>
<!-- ===================================================================================== -->
<h2><a name="recognizing"></a>Reconhecendo arquivos Abc</h2>
<p>Nesta se&ccedil;&atilde;o, utilizaremos um assistente para criar as classes necess&aacute;rias para reconhecer arquivos Abc como sendo distintos de todos os outros. Conforme discutido no in&iacute;cio deste tutorial, para fazer isso precisamos de um objeto de dados e um carregador de dados, assim como de um solucionador de tipo MIME e entradas de registro no arquivo <tt>layer.xml</tt>. O Assistente de novo tipo de arquivo criar&aacute; tudo isso.</p>
<ol>
<li>Clique com o bot&atilde;o direito do mouse no n&oacute; do projeto e escolha Novo &gt; Tipo de arquivo.</li>
<li>No Painel de reconhecimento de arquivos, fa&ccedil;a o seguinte:
<ul>
<li>digite <tt>text/x-abc</tt> na caixa de edi&ccedil;&atilde;o Tipo MIME.</li>
<li>Digite <tt>.abc .ABC</tt> na caixa de edi&ccedil;&atilde;o por Extens&atilde;o de nome de arquivo.</li>
</ul>
<p>O Painel de reconhecimento de arquivos agora deve ter esta apar&ecirc;ncia:</p>
<p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/60-filewizard1.png" alt="Etapa 1 do assistente para Novo arquivo" /></p>
<p>Observe o seguinte sobre os campos no Painel de reconhecimento de arquivos:</p>
<ul>
<li><b>Tipo MIME.</b> Especifica o tipo MIME exclusivo do objeto de dados.</li>
<li>por
<ul><li><b>Extens&atilde;o de nome de arquivo.</b> Especifica uma ou mais extens&otilde;es que o IDE gerar&aacute; reconhecer como pertencente ao tipo de MIME determinado. A extens&atilde;o do arquivo pode opcionalmente ser precedida por um ponto. Os separadores s&atilde;o v&iacute;rgulas, espa&ccedil;os ou ambos. Portanto, todos os exemplos a seguir s&atilde;o v&aacute;lidos:
<ul><li><tt>.abc,.def</tt></li>
<li><tt>.abc .def</tt></li>
<li><tt>abc def</tt></li>
<li><tt>abc,.def ghi, .wow</tt></li></ul>
<p>Vamos imaginar que os arquivos Abc diferenciem mai&uacute;sculas de min&uacute;sculas. Por esse motivo, voc&ecirc; especificar&aacute; <i>dois</i> tipos MIME neste tutorial:<tt>.abc</tt> e <tt>.ABC</tt>.</p></li>
<li><b>Elemento raiz XML.</b> Especifica um &uacute;nico namespace que distingue um tipo de arquivo XML de todos os outros tipos de arquivos XML. Como muitos arquivos XML possuem a mesma extens&atilde;o (<tt>xml</tt>), o IDE faz a distin&ccedil;&atilde;o entre os arquivos XML atrav&eacute;s de seus elementos raiz XML. Mais especificamente, o IDE pode distinguir entre namespaces e o primeiro elemento XML em arquivos XML. Voc&ecirc; pode usar isto para, por exemplo, distinguir entre um descritor de deployment JBoss e um descritor de deployment WebLogic. Ap&oacute;s ter feito essa distin&ccedil;&atilde;o, voc&ecirc; poder&aacute; certificar-se de que os itens de menu adicionados ao menu contextual do descritor de deployment JBoss n&atilde;o est&atilde;o dispon&iacute;veis no descritor de deployment WebLogic. Para obter um exemplo, consulte o <a href="nbm-palette-api2.html">Tutorial do m&oacute;dulo da paleta de componentes do NetBeans</a>.</li></ul></li>
</ul>
<p>Clique em Pr&oacute;ximo.</p></li>
<li>No painel Nome e localiza&ccedil;&atilde;o, digite <tt>Abc</tt> como o Prefixo do nome da classe e v&aacute; para qualquer arquivo de imagem de 16 x 16 pixels como o &iacute;cone do novo tipo de arquivo, conforme mostrado abaixo.
<p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/65-filewizard2.png" alt="Etapa 2 do assistente para Novo arquivo" /></p>
<p><b>Nota:</b> voc&ecirc; pode utilizar qualquer &iacute;cone com uma dimens&atilde;o de 16x16 pixels. Se desejar, voc&ecirc; pode clicar neste e salv&aacute;-lo localmente e depois especific&aacute;-lo na etapa do assistente acima: <img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/Datasource.gif" alt="Datasource.gif" /></p></li>
<li>Clique em Terminar.</li></ol>
<p>A janela Projetos agora deve ter esta apar&ecirc;ncia:</p>
<p><img src="../images/tutorials/filetype/65-projectswindow2.png" alt="Janela Projetos finais." /></p>
<p>Cada um dos arquivos rec&eacute;m-gerados &eacute; brevemente apresentado:</p>
<ul>
<li><b>AbcDataObject.java.</b> Inclui um <tt>FileObject</tt>. DataObjects s&atilde;o produzidos por DataLoaders. Para obter mais informa&ccedil;&otilde;es, consulte <a href="http://wiki.netbeans.org/wiki/view/DevFaqDataObject">O que &eacute; um DataObject?</a>.</li>
<li><b>AbcResolver.xml.</b> Mapeia as extens&otilde;es <tt>.abc</tt> e <tt>.ABC</tt> para o tipo de MIME. O <tt>AbcDataLoader</tt> reconhece somente o tipo MIME; ele n&atilde;o conhece a extens&atilde;o de arquivo.</li>
<li><b>AbcTemplate.abc.</b> Fornece a base para um modelo de arquivo registrado no <tt>layer.xml</tt> de forma que seja instalado na caixa de di&aacute;logo Novo arquivo como um novo modelo.</li>
<li><b>AbcDataObjectTest.java.</b> Classe de teste JUnit para <tt>DataObject</tt>.</li>
</ul>
<p>No arquivo <tt>layer.xml</tt>, voc&ecirc; deve ver o seguinte:</p>
<pre>&lt;folder name=&quot;Loaders&quot;&gt;
&lt;folder name=&quot;text&quot;&gt;
&lt;folder name=&quot;x-abc&quot;&gt;
&lt;folder name=&quot;Actions&quot;&gt;
&lt;file name=&quot;org-myorg-abcfiletype-MyAction.shadow&quot;&gt;
&lt;attr name=&quot;originalFile&quot; stringvalue=&quot;Actions/Edit/org-myorg-abcfiletype-MyAction.instance&quot;/&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;600&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;org-openide-actions-CopyAction.instance&quot;&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;100&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;org-openide-actions-CutAction.instance&quot;&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;200&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;org-openide-actions-DeleteAction.instance&quot;&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;300&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;org-openide-actions-FileSystemAction.instance&quot;&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;400&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;org-openide-actions-OpenAction.instance&quot;&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;500&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;org-openide-actions-PropertiesAction.instance&quot;&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;700&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;org-openide-actions-RenameAction.instance&quot;&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;800&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;org-openide-actions-SaveAsTemplateAction.instance&quot;&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;900&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;org-openide-actions-ToolsAction.instance&quot;&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;1000&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;sep-1.instance&quot;&gt;
&lt;attr name=&quot;instanceClass&quot; stringvalue=&quot;javax.swing.JSeparator&quot;/&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;1100&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;sep-2.instance&quot;&gt;
&lt;attr name=&quot;instanceClass&quot; stringvalue=&quot;javax.swing.JSeparator&quot;/&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;1200&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;sep-3.instance&quot;&gt;
&lt;attr name=&quot;instanceClass&quot; stringvalue=&quot;javax.swing.JSeparator&quot;/&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;1300&quot;/&gt;
&lt;/file&gt;
&lt;file name=&quot;sep-4.instance&quot;&gt;
&lt;attr name=&quot;instanceClass&quot; stringvalue=&quot;javax.swing.JSeparator&quot;/&gt;
&lt;attr name=&quot;position&quot; intvalue=&quot;1400&quot;/&gt;
&lt;/file&gt;
&lt;/folder&gt;
&lt;folder name=&quot;Factories&quot;&gt;
&lt;file name=&quot;AbcDataLoader.instance&quot;&gt;
&lt;attr name=&quot;SystemFileSystem.icon&quot; urlvalue=&quot;nbresloc:/org/myorg/abcfiletype/Datasource.gif&quot;/&gt;
&lt;attr name=&quot;dataObjectClass&quot; stringvalue=&quot;org.myorg.abcfiletype.AbcDataObject&quot;/&gt;
&lt;attr name=&quot;instanceCreate&quot; methodvalue=&quot;org.openide.loaders.DataLoaderPool.factory&quot;/&gt;
&lt;attr name=&quot;mimeType&quot; stringvalue=&quot;text/x-abc&quot;/&gt;
&lt;/file&gt;
&lt;/folder&gt;
&lt;/folder&gt;
&lt;/folder&gt;
&lt;/folder&gt;</pre>
<!-- ======================================================================================= -->
<h2><a name="install"></a>Instalando e testando a funcionalidade</h2>
<p>Agora vamos instalar o m&oacute;dulo e utilizar a funcionalidade b&aacute;sica criada at&eacute; o momento. O IDE utiliza um script de constru&ccedil;&atilde;o Ant para construir e instalar seu m&oacute;dulo. O script de constru&ccedil;&atilde;o &eacute; criado quando o projeto &eacute; criado.</p>
<div class="indent">
<ol>
<li>Na janela Projetos, clique com o bot&atilde;o direito do mouse no projeto <tt>Tipo de arquivo Abc</tt> e escolha Executar.
<p>Uma nova inst&acirc;ncia do IDE &eacute; iniciada, instalando o m&oacute;dulo nele pr&oacute;prio.</p></li>
<li>Utilize a caixa de di&aacute;logo Novo projeto (Ctrl-Shift-N) para criar qualquer tipo de aplicativo no IDE.</li>
<li>Clique com o bot&atilde;o direito do mouse no n&oacute; do aplicativo e escolha Novo &gt; Outro. Na categoria Outro, um modelo est&aacute; dispon&iacute;vel para trabalhar com o novo tipo de arquivo:
<p><img src="../images/tutorials/filetype/60-action4.png" alt="Modelo fict&iacute;cio." /></p>
<p>Complete o assistente e assim ter&aacute; criado um modelo que pode ser utilizado para iniciar o trabalho do usu&aacute;rio com o tipo de arquivo fornecido.</p>
<p class="tips">Se voc&ecirc; desejar fornecer c&oacute;digo padr&atilde;o atrav&eacute;s do modelo, adicione o c&oacute;digo ao arquivo <tt>AbcTemplate.abc</tt> que o assistente Novo tipo de arquivo criou para voc&ecirc;.</p></li>
</ol>
</div>
<!-- ===================================================================================== -->
<h2><a name="adding"></a>Criando recursos para arquivos Abc</h2>
<p>Agora que a Plataforma NetBeans consegue distinguir arquivos Abc de todos os outros tipos de arquivos, &eacute; hora de adicionar recursos especificamente para esses tipos de arquivos. Nesta se&ccedil;&atilde;o, adicionaremos um item de menu no menu contextual de clique com o bot&atilde;o direito do n&oacute; do arquivo na janela do explorer, como na janela Projetos, e permitiremos que o arquivo seja aberto em uma janela, em vez de em um editor.</p>
<div class="indent">
<h3 class="tutorial"><a name="action"></a>Adicionando uma a&ccedil;&atilde;o</h3>
<p>Nesta subse&ccedil;&atilde;o, utilizaremos o assistente de Nova a&ccedil;&atilde;o para criar uma classe Java que realizar&aacute; uma a&ccedil;&atilde;o para o nosso tipo de arquivo. O assistente tamb&eacute;m registrar&aacute; a classe no arquivo <tt>layer.xml</tt> de forma que o usu&aacute;rio possa chamar a a&ccedil;&atilde;o do menu contextual de clique com o bot&atilde;o direito do n&oacute; do tipo de arquivo em uma janela do explorer.</p>
<ol>
<li>Clique com o bot&atilde;o direito do mouse no n&oacute; do projeto e escolha Nova &gt; A&ccedil;&atilde;o</li>
<li>No painel Tipo de a&ccedil;&atilde;o, clique em Habilitada condicionalmente. Digite <tt>AbcDataObject</tt>, que &eacute; o nome do objeto de dados gerado acima pelo assistente de Novo tipo de arquivo, conforme mostrado abaixo:
<p><img src="../images/tutorials/filetype/60-action1.png" alt="Etapa 1 do assistente para Nova a&ccedil;&atilde;o" /></p>
<p>Clique em Pr&oacute;ximo.</p></li>
<li>No painel Registro de GUI, selecione 'Editar' na lista suspensa Categoria. A lista suspensa Categoria controla onde uma a&ccedil;&atilde;o &eacute; mostrada no editor de atalhos de teclado no IDE.
<p>Em seguida, desmarque Item de menu global e selecione Item de menu de conte&uacute;do de tipo de arquivo. Na lista suspensa Tipo de conte&uacute;do, selecione o tipo MIME especificado acima no assistente de Novo tipo de arquivo, conforme mostrado abaixo:</p>
<p><img src="../images/tutorials/filetype/60-action2.png" alt="Etapa 2 do assistente para Nova a&ccedil;&atilde;o" /></p>
<p>Observe que voc&ecirc; pode definir a posi&ccedil;&atilde;o do item de menu e que pode separar o item de menu do item antes e depois dele. Clique em Pr&oacute;ximo.</p></li>
<li>No painel Novo e localiza&ccedil;&atilde;o, digite <tt>MyAction</tt> como o Nome da classe e <tt>My Action</tt> como o Nome de exibi&ccedil;&atilde;o. Os itens de menu fornecidos por menus contextuais n&atilde;o exibem &iacute;cones. Assim, clique em Terminar e <tt>MyAction.java</tt> ser&aacute; adicionado ao pacote <tt>org.myorg.abcfiletype</tt>.</li>
<li>No Editor de c&oacute;digo-fonte, adicione algum c&oacute;digo ao m&eacute;todo <tt>actionPerformed</tt> da a&ccedil;&atilde;o:
<pre class="examplecode">@Override
public void actionPerformed(ActionEvent ev) {
FileObject f = context.getPrimaryFile();
String displayName = FileUtil.getFileDisplayName(f);
String msg = &quot;I am &quot; + displayName + &quot;. Hear me roar!&quot;;
NotifyDescriptor nd = new NotifyDescriptor.Message(msg);
DialogDisplayer.getDefault().notify(nd);
}</pre>
<p>Pressione Ctrl-Shift-I. O IDE automaticamente adiciona comandos import &agrave; parte superior da classe.</p>
<p class="tips">Ainda h&aacute; algum c&oacute;digo sublinhado em vermelho, para indicar que nem todos os pacotes necess&aacute;rios est&atilde;o no classpath. Clique com o bot&atilde;o direito do mouse no n&oacute; do projeto, escolha Propriedades e clique em Bibliotecas na caixa de di&aacute;logo Propriedades do projeto. Clique em Adicionar na parte superior do painel Bibliotecas e adicione a API das caixas de di&aacute;logo.</p>
<p>Na classe <tt>MyAction.java</tt>, pressione Ctrl-Shift-I novamente. O sublinhado vermelho desaparece porque o IDE encontra os pacotes necess&aacute;rios na API das caixas de di&aacute;logo.</p></li>
<li>No n&oacute; Arquivos importantes, expanda Camada XML. Os dois n&oacute;s <tt>&lt;esta camada&gt;</tt> e <tt>&lt;esta camada no contexto&gt;</tt>, junto com seus subn&oacute;s, formam o navegador <a href="https://platform.netbeans.org/tutorials/nbm-glossary.html">Sistema de arquivos do sistema</a>. Expanda <tt>&lt;esta camada&gt;</tt>, expanda <tt>Carregadores</tt>, continue expandindo n&oacute;s at&eacute; ver a <tt>A&ccedil;&atilde;o</tt> criada acima.</li>
<li>Arraste e solte <tt>Minha a&ccedil;&atilde;o</tt> para que ela apare&ccedil;a abaixo da a&ccedil;&atilde;o <tt>Abrir</tt>, como mostrado abaixo:
<p><img src="../images/tutorials/filetype/60-action3.png" alt="Navegador Sistema de arquivos do sistema." /></p>
<p>Como voc&ecirc; pode ver nas &uacute;ltimas duas etapas, o Navegador sistema de arquivos do sistema pode ser utilizado para reorganizar rapidamente a sequ&ecirc;ncia de itens registrados no Sistema de arquivos do sistema.</p></li>
<li>Execute novamente o m&oacute;dulo, como fez na se&ccedil;&atilde;o anterior.</li>
<li>Crie um arquivo ABC, utilizando o modelo mostrado na se&ccedil;&atilde;o anterior, e clique com o bot&atilde;o direito do mouse no n&oacute; do arquivo de uma das visualiza&ccedil;&otilde;es do explorer, como a janela Projeto ou a janela Favoritos.
<p>Observe que o arquivo Abc possui o &iacute;cone atribu&iacute;do a ele em seu m&oacute;dulo e que a lista de a&ccedil;&otilde;es definidas no arquivo <tt>layer.xml</tt> est&aacute; dispon&iacute;vel do menu contextual de clique com o bot&atilde;o direito do mouse:</p>
<p><img src="../images/tutorials/filetype/60-dummytemplate.png" alt="Janela Projetos finais." /></p></li>
<li>Escolha o novo item de menu, o nome e a localiza&ccedil;&atilde;o do arquivo Abc s&atilde;o mostrados:
<p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/60-information.png" alt="Informa&ccedil;&atilde;o." /></p></li>
</ol>
<p>Voc&ecirc; agora sabe como criar uma nova a&ccedil;&atilde;o que aparece no menu de contexto de um arquivo do tipo fornecido, na janela Projetos, janela Arquivos ou na janela Favoritos.</p>
<h3 class="tutorial"><a name="topcomponent"></a>Abrindo o arquivo em uma janela</h3>
<p>Como padr&atilde;o, quando o usu&aacute;rio abre um arquivo do tipo definido neste tutorial, o arquivo &eacute; aberto em um editor b&aacute;sico. Entretanto, algumas vezes voc&ecirc; pode querer criar uma representa&ccedil;&atilde;o visual do arquivo e permitir que o usu&aacute;rio arraste e solte widgets na representa&ccedil;&atilde;o visual. A primeira etapa na cria&ccedil;&atilde;o dessa interface do usu&aacute;rio &eacute; permitir que o usu&aacute;rio abra o arquivo em uma janela. Esta subse&ccedil;&atilde;o mostra como faz&ecirc;-lo.</p>
<ol>
<li>Clique com o bot&atilde;o direito do mouse no n&oacute; do projeto e escolha Novo &gt; Componente da janela. Defina &quot;editor&quot; para Posi&ccedil;&atilde;o da janela e &quot;Abrir na inicializa&ccedil;&atilde;o do aplicativo&quot;, como abaixo mostrado:
<p><img src="../images/tutorials/filetype/65-topc-1.png" alt="Etapa 1 do assistente para Nova a&ccedil;&atilde;o" /></p></li>
<li>Clique em Pr&oacute;ximo e digite &quot;Abc&quot; como o prefixo do nome da classe:
<p><img src="../images/tutorials/filetype/65-topc-2.png" alt="Etapa 1 do assistente para Nova a&ccedil;&atilde;o" /></p>
<p>Clique em Terminar.</p>
</li>
<li>Altere <tt>DataObject</tt> para utilizar <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-loaders/org/openide/loaders/OpenSupport.html">OpenSupport </a></tt> em vez de DataEditorSupport, alterando o construtor de <tt>DataObject</tt> da seguinte maneira:
<pre>public AbcDataObject(FileObject pf, MultiFileLoader loader)
throws DataObjectExistsException, IOException {
super(pf, loader);
CookieSet cookies = getCookieSet();
<b>//cookies.add((Node.Cookie) DataEditorSupport.create(this, getPrimaryEntry(), cookies));
cookies.add((Node.Cookie) new AbcOpenSupport(getPrimaryEntry()));</b>
}</pre>
</li>
<li>Crie a classe <tt><a href="http://bits.netbeans.org/dev/javadoc/org-openide-loaders/org/openide/loaders/OpenSupport.html">OpenSupport</a></tt>:
<pre>class AbcOpenSupport extends OpenSupport implements OpenCookie, CloseCookie {
public AbcOpenSupport(AbcDataObject.Entry entry) {
super(entry);
}
protected CloneableTopComponent createCloneableTopComponent() {
AbcDataObject dobj = (AbcDataObject) entry.getDataObject();
AbcTopComponent tc = new AbcTopComponent();
tc.setDisplayName(dobj.getName());
return tc;
}
}</pre>
<p class="tips">Ajuste o TopComponent para estender CloneableTopComponent, em vez de TopComponent. Defina o modificador de classe do TopComponent e o modificador de seu construtor, como p&uacute;blico em vez de privado.</p></li>
</ol>
<p>Instale o m&oacute;dulo novamente e depois, quando um arquivo Abc estiver aberto, a classe <tt>OpenSupport </tt>lidar&aacute; com a abertura de forma que o arquivo seja aberto no <tt>TopComponent</tt> em vez de abrir no editor b&aacute;sico do <tt>DataEditorSupport:</tt></p>
<p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/65-topc-3.png" alt="Etapa 1 do assistente para Nova a&ccedil;&atilde;o" /></p>
<p class="tips">O <a href="https://platform.netbeans.org/tutorials/nbm-visual_library.html">tutorial do NetBeans Visual Library </a> fornece um exemplo do que voc&ecirc; pode fazer para desenvolver o TopComponent ainda mais para que ele exiba o conte&uacute;do de um arquivo que corresponda ao tipo de arquivo definido neste tutorial.</p>
<br />
<!-- ======================================================================================= -->
<h3><a name="multiview"></a>Criando uma janela de m&uacute;ltiplas visualiza&ccedil;&otilde;es</h3>
<p>Agora que somos capazes de abrir um arquivo em uma janela, vamos tornar esta janela mais interessante. Iremos criar uma janela de m&uacute;ltiplas visualiza&ccedil;&otilde;es. A primeira aba de uma janela com m&uacute;ltiplas visualiza&ccedil;&otilde;es &eacute; normalmente utilizada para exibir uma representa&ccedil;&atilde;o visual do arquivo, enquanto a segunda aba normalmente mostra a visualiza&ccedil;&atilde;o fonte. Mais do que duas abas podem ser fornecidas, cada uma fornecendo mais n&iacute;veis de detalhes sobre o arquivo aberto.</p>
<ol>
<li>Clique com o bot&atilde;o direito do mouse no n&oacute; do projeto e escolha Propriedades. Na caixa de di&aacute;logo Propriedades do projeto, escolha Bibliotecas, e clique em Adicionar. Defina uma depend&ecirc;ncia na &quot;<a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-core-multiview/overview-summary.html">Janela com m&uacute;ltiplas visualiza&ccedil;&otilde;es</a>&quot;. Clique em OK, em seguida, clique em OK novamente para sair da caixa de di&aacute;logo Propriedades do projeto.</li>
<li>Para cada aba que deseja criar na janela com m&uacute;ltiplas visualiza&ccedil;&otilde;es, crie uma classe que implemente <tt><a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-core-multiview/org/netbeans/core/spi/multiview/MultiViewDescription.html">MultiViewDescription</a></tt> e <tt>Serializable</tt>.<p>Para os prop&oacute;sitos deste tutorial, comece por criar uma classe denominada <tt>AbcMultiviewDescription1</tt>, implementando as classes especificadas:</p>
<pre>public class AbcMultiviewDescription1 implements MultiViewDescription, Serializable {
public int getPersistenceType() {
throw new UnsupportedOperationException(&quot;Not supported yet.&quot;);
}
public String getDisplayName() {
throw new UnsupportedOperationException(&quot;Not supported yet.&quot;);
}
public Image getIcon() {
throw new UnsupportedOperationException(&quot;Not supported yet.&quot;);
}
public HelpCtx getHelpCtx() {
throw new UnsupportedOperationException(&quot;Not supported yet.&quot;);
}
public String preferredID() {
throw new UnsupportedOperationException(&quot;Not supported yet.&quot;);
}
public MultiViewElement createElement() {
throw new UnsupportedOperationException(&quot;Not supported yet.&quot;);
}
}</pre>
<p class="tips">Na classe <tt>AbcMultiviewDescription1</tt> acima, o m&eacute;todo <tt>createElement()</tt> retorna um MultiViewElement. O que voc&ecirc; deseja retornar aqui &eacute; seu <tt>TopComponent</tt>, o que faremos na pr&oacute;xima etapa.</p></li>
<li>Reescreva a assinatura da classe. Para fornecer um elemento de m&uacute;ltiplas visualiza&ccedil;&otilde;es para a descri&ccedil;&atilde;o na etapa anterior, precisamos implementar <tt><a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-core-multiview/org/netbeans/core/spi/multiview/MultiViewElement.html">MultiViewElement</a></tt>:
<pre>public final class AbcTopComponent extends TopComponent implements MultiViewElement {</pre>
<p>Na <tt>TopComponent</tt>, voc&ecirc; agora precisa excluir (colocar um coment&aacute;rio) os m&eacute;todos <tt>findInstance()</tt>, <tt>getPersistenceType()</tt>, <tt>writeReplace()</tt> e <tt>preferredID()</tt>.</p></li>
<li>Para o momento, forne&ccedil;a implementa&ccedil;&otilde;es bem simples para cada um dos m&eacute;todos necess&aacute;rios. Comece por definir uma nova <tt>JToolbar</tt> acima da classe <tt>TopComponent</tt>:
<pre>private JToolBar toolbar = new JToolBar();</pre>
<p>A seguir, implemente os m&eacute;todos como segue:</p>
<pre> public JComponent getVisualRepresentation() {
return this;
}
public JComponent getToolbarRepresentation() {
return toolbar;
}
public void setMultiViewCallback(MultiViewElementCallback arg0) {
}
public CloseOperationState canCloseElement() {
return null;
}
public Action[] getActions() {
return new Action[]{};
}
public Lookup getLookup() {
return Lookups.singleton(this);
}
public void componentShowing() {
}
public void componentHidden() {
}
public void componentActivated() {
}
public void componentDeactivated() {
}
public UndoRedo getUndoRedo() {
return UndoRedo.NONE;
}</pre></li>
<li>Agora voc&ecirc; pode redefinir a <tt>AbcMultiviewDescription1</tt> como segue:
<pre>public class AbcMultiviewDescription1 implements MultiViewDescription, Serializable {
public int getPersistenceType() {
return TopComponent.PERSISTENCE_ALWAYS;
}
public String getDisplayName() {
return &quot;Tab 1&quot;;
}
public Image getIcon() {
return ImageUtilities.loadImage(&quot;/org/myorg/abcfiletype/Datasource.gif&quot;);
}
public HelpCtx getHelpCtx() {
return null;
}
public String preferredID() {
return &quot;AbcMultiviewDescription1&quot;;
}
public MultiViewElement createElement() {
return new AbcTopComponent();
}
}</pre></li>
<li>Altere o m&eacute;todo <tt>createCloneableTopComponent</tt> na classe <tt>OpenSupport</tt> para abrir seu <tt>TopComponent</tt> atrav&eacute;s da classe <tt>MultiViewDescription</tt> acima criada:
<pre>protected CloneableTopComponent createCloneableTopComponent() {
// Create an array of multiview descriptors:
AbcMultiviewDescription1 firstTab = new AbcMultiviewDescription1();
MultiViewDescription[] descriptionArray = { firstTab };
// Create the multiview window:
CloneableTopComponent tc = MultiViewFactory.createCloneableMultiView(descriptionArray, firstTab, null);
tc.setDisplayName(entry.getDataObject().getName());
return tc;
}</pre>
<p class="tips">O segundo argumento em <tt>MultiViewFactory.createCloneableMultiView</tt> determina quais abas s&atilde;o abertas por padr&atilde;o. Aqui est&aacute; a <tt>firstTab</tt>, a aba definida por <tt>AbcMultiViewDescription1</tt>.</p></li>
<li>Instale e abra novamente o arquivo. Agora voc&ecirc; tem uma janela com m&uacute;ltiplas visualiza&ccedil;&otilde;es com uma aba:
<p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/65-mvdeployed.png" alt="m&uacute;ltipla visualiza&ccedil;&atilde;o implementada" /></p></li>
</ol>
<p>Agora voc&ecirc; tem uma aba &uacute;nica em uma janela com m&uacute;ltiplas visualiza&ccedil;&otilde;es. Para cada aba adicional, crie uma nova classe <tt>MultiviewDescription</tt> com um novo <tt>TopComponent</tt>, e, em seguida, crie a inst&acirc;ncia da classe <tt>MultiViewDescription</tt> na extens&atilde;o <tt>OpenSupport</tt> , como mostrado acima.</p>
</div>
<!-- ======================================================================================= -->
<h2><a name="share"></a>Criando um bin&aacute;rio de m&oacute;dulo compartilh&aacute;vel</h2>
<p>Agora que o m&oacute;dulo est&aacute; conclu&iacute;do, voc&ecirc; pode permitir que ele seja utilizado por outras pessoas. Para isso, voc&ecirc; precisa criar um arquivo &quot;NBM&quot; (m&oacute;dulo NetBeans) bin&aacute;rio e distribu&iacute;-lo.</p>
<div class="indent">
<ol>
<li>Na janela Projetos, clique com o bot&atilde;o direito do mouse no projeto <tt>Tipo de arquivo Abc</tt> e escolha Criar NBM.
<p>O arquivo NBM &eacute; criado e voc&ecirc; pode visualiz&aacute;-lo na janela Arquivos (Ctrl+-2):</p>
<p><img style="border: 1px solid #0e1b55" src="../images/tutorials/filetype/60-shareable-nbm.png" alt="NBM que pode ser compartilhado." /></p></li>
<li>Disponibilize-o para outras pessoas, por exemplo, atrav&eacute;s do <a href="http://plugins.netbeans.org/PluginPortal/">Portal plug-in do NetBeans</a>. O destinat&aacute;rio deve utilizar o Gerenciador de plug-ins (Ferramentas &gt; Plug-ins) para instal&aacute;-lo.</li>
</ol>
</div>
<!-- ======================================================================================== -->
<br>
<div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&amp;subject=Feedback:%20File%20Type%20Module%20Tutorial">Envie-nos seus coment&aacute;rios</a></div>
<br style="clear:both;" />
<!-- ======================================================================================== -->
<h2><a name="nextsteps"></a>Pr&oacute;ximas etapas</h2>
<p>Para obter mais informa&ccedil;&otilde;es sobre a cria&ccedil;&atilde;o e o desenvolvimento de m&oacute;dulos do NetBeans, consulte os seguintes recursos:
<ul>
<li><a href="https://platform.netbeans.org/index.html">P&aacute;gina inicial da Plataforma NetBeans </a></li>
<li><a href="https://netbeans.org/download/dev/javadoc/">Lista de APIs do NetBeans (Vers&atilde;o de desenvolvimento atual)</a></li>
<li><a href="https://netbeans.org/kb/trails/platform_pt_BR.html">Outros tutoriais relacionados</a></li></ul>
</p>
<!-- ======================================================================================== -->
<!--
<h2><a name="version"></a>Versioning </h2>
<p>
<table width="76%" >
<tbody>
<tr>
<td>
<div align="left"><b>Version</b></div>
</td>
<td>
<div align="left"><b>Date</b></div>
</td>
<td>
<div align="left"><b>Changes</b></div>
</td>
</tr>
<tr>
<td>
1
</td>
<td>
25 August 2005
</td>
<td>
<ul><li>Initial version.
<li>To do:
<ul><li>Add post-creation customizations (i.e., the "Extending Support for the New File Type" section).
<li>Explain what the generated files are for (placeholders currently).
<li>Explain the layer file's entries.
<li>Explain the first File Type panel (placeholders currently).
<li>Maybe create a separate tutorial for recognizing XML files.</ul></ul>
</td>
</tr>
<tr>
<td>
2
</td>
<td>
23 September 2005
</td>
<td>
<ul><li>A lot of info added from the FAQ and added the Action wizard and System Filesystem Browser.
<li>To do:
<ul><li>Explain <tt>LoaderBeanInfo.java</tt> and <tt>Resolver.xml</tt> (one line each)
<li>Maybe create a separate tutorial for recognizing XML files.
<li>Using Tomcat GIF maybe not good idea.
<li>Maybe the action should do something useful.
<li>Maybe direct links to FAQ not good idea.
<li>Probably more needed on <tt>layer.xml</tt> file.
<li>Maybe other useful apisupport functionality could be added to this scenario.
<li>More info needed on MIME types.
<li>The introductory paragraphs should be illustrated with a graphic. A diagram to
show relationship between node, dataobject, fileobject, dataloader, etc.</ul></ul>
</td>
</tr>
<tr>
<td>
3
</td>
<td>
28 September 2005
</td>
<td>
<ul><li>Integrated comments from Jesse Glick.
<li>To do:
<ul> <li>More info needed on MIME types.
<li>The introductory paragraphs should be illustrated with a graphic. A diagram to
show relationship between node, dataobject, fileobject, dataloader, etc.
<li>Many Javadoc links to be added (also for <tt>performAction</tt>.
<li>Info on cookies, cookie actions, cookie classes needed.
<li>Action ended up in text-html even though I chose my own mime type.
<li>Need to explain or link to explanation for instance, shadow, etc.
<li>Platform Manager needs to be mentioned in the context of installing
in target platform.
<li>Show how to add properties to the property sheet.</ul></ul>
</td>
</tr>
<tr>
<td>
4
</td>
<td>
4 October 2005
</td>
<td>
<ul><li>Added two diagrams in the introductory paragraphs, from Tim Boudreau's JavaOne presentation.
<li>To do:
<ul> <li>More info needed on MIME types.
<li>Many Javadoc links to be added (also for <tt>performAction</tt>).
<li>Need to create section near the start: "Related FAQs":
<ul><li>Info on cookies, cookie actions, cookie classes needed.
<li>Need to explain or link to explanation for instance, shadow, etc.
<li>DataLoader, DataObject, etc.</ul>
<li>Platform Manager needs to be mentioned in the context of installing
in target platform.
<li>Show how to add properties to the property sheet.
<li>Mention the dummy template that you get, how to modify it,
and how to set the description in the New File wizard.</ul></ul>
</td>
</tr>
<tr>
<td>
4
</td>
<td>
4 November 2005
</td>
<td>
<ul><li>Added downloadable source code, new 'Installing the Sample' section, and link to
Syntax Highlighting tutorial at the end.
<li>To do:
<ul> <li>Same items as on 4 October still to be done.</ul>
</td>
</tr>
<tr>
<td>
5
</td>
<td>
29 November 2005
</td>
<td>
<ul><li>Added links to brand new Component Palette tutorial.
<li>To do:
<ul> <li>Same items as on 4 October still to be done.</ul>
</td>
</tr>
<tr>
<td>
6
</td>
<td>
21 April 2006
</td>
<td>
<ul><li>Changed the title from "DataLoader Module Tutorial" to "Recognizing a File Type Tutorial".
<li>To do:
<ul> <li>Same items as on 4 October still to be done.</ul>
</td>
</tr>
<tr>
<td>
7
</td>
<td>
17 November 2007
</td>
<td>
<ul><li>Updated the whole tutorial to 6.0, replaced all screenshots, and
now [because the 6.0 IDE already provides support for manifest files], the
tutorial focuses on imaginary Abc files.
<li>To do:
<ul> <li>Need to replace the download, which is the same as before, dealing with manifest files.
<li>Same items as on 4 October still to be done.
<li>Added OpenSupport into TopComponent, with a reference to Visual Library.</ul>
<li>Changed title to File Type Integration Tutorial
<li>Tweaked several places throughout tutorial, for 6.0
</td>
</tr>
<tr>
<td>
8
</td>
<td>
15 April 2008
</td>
<td>
Updated the styles (badge, table of contents, required software table)
to the new format.
</td>
</tr>
<tr>
<td>
9
</td>
<td>
16 July 2008
</td>
<td>
Created new version for 6.5, because of changes to the
way file type recognition is done in that release. To do:
<ul>
<li>6.5-specific badge
<li>Required software table
<li>Search for DataNode, BeanInfo, DataLoader and reword
<li>Check screenshots
<li>Make sure all the sections work as before
</ul>
</td>
</tr>
<tr>
<td>
10
</td>
<td>
4 April 2009
</td>
<td>
Worked through everything and added the multiview section.
</td>
</tr>
<tr>
<td>
11
</td>
<td>
9 Feb 2010
</td>
<td>
Changed JPanel to TopComponent in multiview section.
</td>
</tr>
<tr>
<td>
12
</td>
<td>
10 Feb 2010
</td>
<td>
Added links to javadoc for the MultiView classes.
</td>
</tr>
<tr>
<td>
13
</td>
<td>
18 Feb 2010
</td>
<td>
Added style for borders and fixed action instructions.
</td>
</tr>
</tbody>
</table>
-->
</body>
</html>