| <!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 do módulo de assistente do NetBeans 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="geertjan.wielenga@sun.com"> |
| <meta name="indexed" content="y"> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <meta name="description" |
| content="A walk-through of the |
| basic features of the Wizard API classes."> |
| <!-- Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. --> |
| <!-- Use is subject to license terms.--> |
| </head> |
| |
| <body> |
| |
| <h1>Tutorial do módulo de assistente do NetBeans</h1> |
| |
| <p>Neste tutorial, você aprenderá como utilizar os recursos principais fornecidos pelas classes de assistente da <a href="http://bits.netbeans.org/dev/javadoc/org-openide-dialogs/org/openide/package-summary.html">API de diálogos do NetBeans</a>.</p> |
| |
| <p><b>Conteúdo</b></p> |
| |
| <p><img src="../images/articles/69/netbeans-stamp7-8-9.png" class="stamp" width="114" height="114" alt="O conteúdo desta página se aplica ao NetBeans IDE 6.5, 6.7, 6.8" title="O conteúdo desta página se aplica ao NetBeans IDE 6.5, 6.7, 6.8" /></p> |
| |
| <ul class="toc"> |
| <li><a href="#set">Criando o projeto do módulo</a> |
| <li><a href="#wiz">Criando a infraestrutura do assistente</a> |
| <li><a href="#action">Registrando a classe de ação do assistente</a> |
| <li><a href="#design">Criando o conteúdo do assistente</a> |
| <li><a href="#process">Processando os dados do usuário</a> |
| <li><a href="#validate">Validando os dados do usuário</a> |
| <li><a href="#persist">Persistindo dados nas reinicializações</a> |
| <li><a href="#brand">Marcando o assistente</a> |
| <li><a href="#further">Leituras adicionais</a> |
| </ul> |
| |
| |
| <p class="tips"> Nos aplicativos da plataforma NetBeans, é possível criar diferentes tipos de assistentes. Se deseja criar um assistente que apareça na caixa de diálogo Novo projeto, consulte o <a href="https://platform.netbeans.org/tutorials/nbm-projectsamples.html">Tutorial do módulo de amostra do projeto</a>. Se deseja criar um assistente que apareça na caixa de diálogo Novo arquivo, consulte o <a href="http://platform.netbeans.org/tutorials/nbm-filetemplates.html">Tutorial do módulo de arquivo de modelo</a>. Neste tutorial, é criado um assistente geral que aparece ao clicar em um botão na barra de ferramentas. |
| |
| |
| <p><b>Para seguir este tutorial, os softwares e recursos listados na tabela seguinte são necessários.</b></p> |
| |
| <table> |
| <tbody> |
| <tr> |
| <th class="tblheader" scope="col">Software ou recurso</th> |
| <th class="tblheader" scope="col">Versão necessária</th> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td> |
| <td class="tbltd1">versã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ão 6 ou<br/>versão 5</td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <!-- ===================================================================================== --> |
| |
| <h2 class="tutorial"><a name="set"></a>Criando o projeto do módulo</h2> |
| |
| <p>Começamos a trabalhar através do assistente para novo projeto de módulo. No final, teremos uma estrutura de código-fonte básica com alguns arquivos padrão, que todos os módulos NetBeans exigem. |
| |
| <ol> |
| <li>Escolha Arquivo > Novo projeto (Ctrl-Shift-N). Em Categorias, selecione Módulos do NetBeans. Em Projetos, selecione Módulo. Clique em Próximo.</li> |
| <li>No painel Nome e localização, digite <tt>DemoWizard</tt> no campo Nome do projeto. Altere Local do projeto para qualquer diretório no computador. Deixe marcadas a opção Módulo independente e a caixa de verificação Definir como projeto principal. Clique em Próximo.</li> |
| <li>No painel Configuração básica de módulos, digite <tt>org.demo.wizard</tt> no Nome de base de código.</li> |
| <li>Selecione "Gerar camada XML". Deixe as localizações do pacote de localizações e da camada XML de modo que sejam armazenados em um pacote com o nome <tt>org/demo/wizard</tt>. Clique em Terminar.</li> |
| </ol> |
| |
| <p> O IDE cria o projeto <tt>DemoWizard</tt>. O projeto contém todos os metadados de projeto e códigos-fonte, como o script de construção Ant do projeto. O projeto se abre no IDE. É possível ver a estrutura lógica na janela Projetos (Ctrl-1) e a estrutura de arquivos na janela Arquivos (Ctrl+2).</p> |
| |
| |
| <br /> |
| |
| <!-- ===================================================================================== --> |
| |
| <p><h2><a name="wiz"></a>Criando a infraestrutura do assistente</h2> |
| |
| <p>Nesta seção, utilizamos o assistente Wizard para adicionar stubs de um assistente ao nosso módulo. |
| |
| <ol> |
| <li><p>Na janela Projetos, clique com o botão direito do mouse no nó do projeto DemoWizard e selecione Desenvolvimento do módulo | Assistente:</p> |
| <p><img border="1" src="../images/tutorials/wizard/wizard-wizard.png"/> |
| <p>Clique em Avançar.</p> |
| </li> |
| <li><p>No painel Tipo de assistente, digite 2 no campo "Número de painéis do assistente" e deixe os outros valores inalterados:</p> |
| <p><img border="1" src="../images/tutorials/wizard/wizard-wizard-3.png"/> |
| <p>Os campos no painel acima são os seguintes: |
| <ul> |
| <li><b>Tipo de registro.</b> Determina onde o usuário acessará o assistente. Se selecionar "Personalizado", o assistente Wizard criará uma nova classe de ação que você pode utilizar para abrir e inicializar seu assistente. Se selecionar "Novo arquivo", o assistente Wizard registrará seu assistente no arquivo <tt>layer.xml</tt> do módulo. |
| <li><b>Sequência de etapas do assistente.</b> Determina se o assistente será linear ou se o usuário do assistente poderá saltar etapas dependendo das escolhas feitas anteriormente. Os assistentes lineares são 'estáticos', que é o padrão, enquanto que os assistentes com etapas que podem ser saltadas requerem uma classe de repetidor personalizada, que é criada se você seleciona 'dinâmico'. |
| <li><b>Número de painéis do assistente.</b> Determina o número de painéis que serão criados. Para cada etapa do assistente, serão criados dois arquivos Java: uma visualização e um controlador. |
| </ul> |
| <p>Clique em Avançar.</p> |
| </li> |
| <li><p>No painel Nome e localização, digite <tt>Demo</tt> no Prefixo do nome da classe e selecione o pacote principal na lista suspensa Pacote:</p> |
| <p><img border="1" src="../images/tutorials/wizard/wizard-wizard-4.png"/> |
| <p>Clique em Terminar.</p> |
| </li> |
| </ol> |
| |
| <p>Na janela Projetos, agora deveria aparecer o seguinte: |
| <p><img border="1" src="../images/tutorials/wizard/projects-window.png"/> |
| |
| <p><h2><a name="action"></a>Registrando a classe de ação do assistente</h2> |
| |
| <p>Nesta seção, modificamos a classe Action e a registramos no arquivo <tt>layer.xml</tt>. |
| |
| <ol> |
| <li>Abra o arquivo <tt>DemoWizardAction.java</tt> e substitua todos os códigos pelo seguinte: |
| |
| <pre class=examplecode> |
| package org.demo.wizard; |
| |
| import java.awt.Component; |
| import java.awt.Dialog; |
| import java.awt.event.ActionEvent; |
| import java.awt.event.ActionListener; |
| import java.text.MessageFormat; |
| import javax.swing.JComponent; |
| import org.openide.DialogDisplayer; |
| import org.openide.WizardDescriptor; |
| |
| public final class DemoWizardAction implements ActionListener { |
| |
| private WizardDescriptor.Panel[] panels; |
| |
| public void actionPerformed(ActionEvent e) { |
| WizardDescriptor wizardDescriptor = new WizardDescriptor(getPanels()); |
| // {0} will be replaced by WizardDesriptor.Panel.getComponent().getName() |
| wizardDescriptor.setTitleFormat(new MessageFormat("{0}")); |
| wizardDescriptor.setTitle("Your wizard dialog title here"); |
| Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); |
| dialog.setVisible(true); |
| dialog.toFront(); |
| boolean cancelled = wizardDescriptor.getValue() != WizardDescriptor.FINISH_OPTION; |
| if (!cancelled) { |
| // do something |
| } |
| } |
| |
| /** |
| * Initialize panels representing individual wizard's steps and sets |
| * various properties for them influencing wizard appearance. |
| */ |
| private WizardDescriptor.Panel[] getPanels() { |
| if (panels == null) { |
| panels = new WizardDescriptor.Panel[]{ |
| new DemoWizardPanel1(), |
| new DemoWizardPanel2() |
| }; |
| String[] steps = new String[panels.length]; |
| for (int i = 0; i < panels.length; i++) { |
| Component c = panels[i].getComponent(); |
| // Default step name to component name of panel. Mainly useful |
| // for getting the name of the target chooser to appear in the |
| // list of steps. |
| steps[i] = c.getName(); |
| if (c instanceof JComponent) { // assume Swing components |
| JComponent jc = (JComponent) c; |
| // Sets step number of a component |
| // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: |
| jc.putClientProperty("WizardPanel_contentSelectedIndex", new Integer(i)); |
| // Sets steps names for a panel |
| jc.putClientProperty("WizardPanel_contentData", steps); |
| // Turn on subtitle creation on each step |
| jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); |
| // Show steps on the left side with the image on the background |
| jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); |
| // Turn on numbering of all steps |
| jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); |
| } |
| } |
| } |
| return panels; |
| } |
| |
| public String getName() { |
| return "Start Sample Wizard"; |
| } |
| |
| } |
| </pre> |
| |
| </li> |
| |
| <p class="tips"> Estamos utilizando o mesmo código que foi gerado, exceto que implementamos o <tt>ActionListener</tt> em vez do <tt>CallableSystemAction</tt>. Fazemos isso porque <tt>ActionListener</tt> é uma classe JDK padrão, enquanto que <tt>CallableSystemAction</tt> não. A partir da plataforma NetBeans 6.5, é possível utilizar a classe JDK padrão, que é mais apropriada e exige menos código. |
| |
| <li>Registre a classe de ação no arquivo <tt>layer.xml</tt> da seguinte forma: |
| |
| <pre class=examplecode> |
| <filesystem> |
| <folder name="Actions"> |
| <folder name="File"> |
| <file name="org-demo-wizard-DemoWizardAction.instance"> |
| <attr name="delegate" newvalue="org.demo.wizard.DemoWizardAction"/> |
| <attr name="iconBase" stringvalue="org/demo/wizard/icon.png"/> |
| <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/> |
| <attr name="noIconInMenu" stringvalue="false"/> |
| </file> |
| </folder> |
| </folder> |
| <folder name="Toolbars"> |
| <folder name="File"> |
| <file name="org-demo-wizard-DemoWizardAction.shadow"> |
| <attr name="originalFile" stringvalue="Actions/File/org-demo-wizard-DemoWizardAction.instance"/> |
| <attr name="position" intvalue="0"/> |
| </file> |
| </folder> |
| </folder> |
| </filesystem> |
| </pre> |
| |
| <p class="tips"> O elemento "iconBase" aponta para uma imagem denominada "icon.png" do pacote principal. Utilize sua própria imagem com tal nome, certificando-se de que o tamanho seja de 16x16 pixels ou utilize a imagem seguinte: <img border="1" src="../images/tutorials/wizard/icon.png"/> |
| |
| <li>Execute o módulo. O aplicativo se inicia e o botão deveria ser visto na barra de ferramentas que foi especificada no arquivo <tt>layer.xml</tt>: |
| |
| <p><img border="1" src="../images/tutorials/wizard/result-1.png"/> |
| |
| <p>Clique no botão e o assistente é exibido: |
| <p><img border="1" src="../images/tutorials/wizard/result-2.png"/> |
| <p>Clique em Próximo e observe que no painel final o botão Terminar está habilitado: |
| <p><img border="1" src="../images/tutorials/wizard/result-3.png"/> |
| |
| </li> |
| |
| </ol> |
| |
| <p>Agora que a infraestrutura do assistente está funcionando, vamos adicionar algum tipo de conteúdo. |
| |
| <p><h2><a name="design"></a>Criando o conteúdo do assistente</h2> |
| |
| <p>Nesta seção, adicionamos o conteúdo ao assistente e personalizamos os recursos básicos. |
| |
| <ol> |
| <li><p>Abra o arquivo <tt>DemoWizardAction.java</tt> e observe que é possível definir várias propriedades de personalização para o assistente:</p> |
| <p><img border="1" src="../images/tutorials/wizard/wizard-tweaking.png"/></p> |
| <p>Leia mais sobre estas propriedades <a href="http://ui.netbeans.org/docs/ui_apis/wide/index.html">aqui</a>. |
| </li> |
| <li><p>Em <tt>DemoWizardAction.java</tt>, altere <tt>wizardDescriptor.setTitle</tt> pelo seguinte: |
| <pre class=examplecode> |
| wizardDescriptor.setTitle("Music Selection"); |
| </pre> |
| <li><p>Abra os arquivos <tt>DemoVisualPanel1.java</tt> e <tt>DemoVisualPanel2.java</tt> e utilize o construtor de GUI "Matisse" para adicionar alguns componentes Swing, como os seguintes:</p> |
| <p><img border="1" src="../images/tutorials/wizard/panel-1-design.png"/></p> |
| <p><img border="1" src="../images/tutorials/wizard/panel-2-design.png"/></p> |
| <p>Acima, você vê os arquivos <tt>DemoVisualPanel1.java</tt> e <tt>DemoVisualPanel2.java</tt> com alguns componentes Swing. |
| </li> |
| <li>Abra os dois painéis na visualização Código-fonte e altere seus métodos <tt>getName()</tt> por "Name and Address" e "Musician Details", respectivamente. |
| <li><p>Execute o módulo novamente. Quando o assistente for aberto, você deveria ver algo semelhante ao exibido abaixo, dependendo dos componentes Swing adicionados e das personalizações feitas:</p> |
| <p><img border="1" src="../images/tutorials/wizard/result-4.png"/></p> |
| |
| <p class="tips"> A imagem na barra lateral esquerda do assistente acima é definida no arquivo <tt>DemoWizardAction.java</tt>, da seguinte forma: |
| |
| <pre class=examplecode> |
| wizardDescriptor.putProperty("WizardPanel_image", ImageUtilities.loadImage("org/demo/wizard/banner.png", true)); |
| </pre> |
| |
| </ol> |
| |
| <p>Agora que o conteúdo do assistente foi criado, vamos adicionar código para o processamento dos dados que o usuário gerará introduzir. |
| |
| <!-- ===================================================================================== --> |
| |
| <h2 class="tutorial"><a name="process"></a>Processando os dados do usuário</h2> |
| |
| <p>Nesta seção, você aprende como passar os dados do usuário de um painel a outro e como exibir os resultados para o usuário quando ele clicar em Terminar. |
| |
| <ol> |
| <li><p>Nas classes de <tt>WizardPanel</tt>, utilize o método <tt>storeSettings</tt> para recuperar os dados definidos no painel visual. Por exemplo, crie getters no arquivo <tt>DemoVisualPanel1.java</tt> e, em seguida, acesse-os da seguinte forma a partir do arquivo <tt>DemoWizardPanel1.java</tt>:</p> |
| |
| <pre class=examplecode> |
| public void storeSettings(Object settings) { |
| ((WizardDescriptor) settings).putProperty("name", ((DemoVisualPanel1)getComponent()).getNameField()); |
| ((WizardDescriptor) settings).putProperty("address", ((DemoVisualPanel1)getComponent()).getAddressField()); |
| } |
| </pre> |
| |
| </li> |
| <li><p>Depois, utilize o arquivo <tt>DemoWizardAction.java</tt> para recuperar as propriedades que você definiu e adote o seguinte procedimento com tais propriedades:</p> |
| |
| <pre class=examplecode> |
| public void actionPerformed(ActionEvent e) { |
| WizardDescriptor wizardDescriptor = new WizardDescriptor(getPanels()); |
| // {0} will be replaced by WizardDesriptor.Panel.getComponent().getName() |
| wizardDescriptor.setTitleFormat(new MessageFormat("{0}")); |
| wizardDescriptor.setTitle("Music Selection"); |
| Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); |
| dialog.setVisible(true); |
| dialog.toFront(); |
| boolean cancelled = wizardDescriptor.getValue() != WizardDescriptor.FINISH_OPTION; |
| if (!cancelled) { |
| <b>String name = (String) wizardDescriptor.getProperty("name"); |
| String address = (String) wizardDescriptor.getProperty("address"); |
| DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message(name + " " + address));</b> |
| } |
| } |
| </pre> |
| |
| <p class="tips"> O <tt>NotifyDescriptor</tt> pode ser utilizado também de outras formas, conforme indicado pela caixa de autocompletar código: |
| |
| <p><img border="1" src="../images/tutorials/wizard/notifydescriptor.png"/></p> |
| |
| |
| </ol> |
| |
| <p>Agora você já sabe como processar os dados introduzidos pelo usuário. |
| |
| <br /> |
| |
| <!-- ===================================================================================== --> |
| |
| <h2 class="tutorial"><a name="validate"></a>Validando os dados do usuário</h2> |
| |
| <p>Nesta seção, você aprende como validar a entrada do usuário quando o botão "Next" for clicado no assistente. |
| |
| <ol> |
| <li><p>Em <tt>DemoWizardPanel1</tt>, altere a assinatura de classe, implementando <tt>WizardDescriptor.ValidatingPanel</tt> em vez de <tt>WizardDescriptor.Panel</tt>:</p> |
| |
| <pre class=examplecode> |
| public class DemoWizardPanel1 implements WizardDescriptor.ValidatingPanel |
| </pre> |
| |
| <li>Na parte superior da classe, altere a declaração <tt>JComponent</tt> por uma declaração digitada: |
| |
| <pre class=examplecode> |
| private DemoVisualPanel1 component; |
| </pre> |
| |
| <li>Implemente o método abstrato necessário da seguinte forma: |
| |
| <pre class=examplecode> |
| @Override |
| public void validate() throws WizardValidationException { |
| |
| String name = component.getNameTextField().getText(); |
| if (name.equals("")){ |
| throw new WizardValidationException(null, "Invalid Name", null); |
| } |
| |
| } |
| </pre> |
| |
| <li><p>Execute o módulo. Clique em "Next", sem introduzir nada no campo "Name" e você deveria ver o resultado abaixo. Observe também que não é possível mover para o painel seguinte, como consequência da falha na validação:</p> |
| |
| <p><img border="1" src="../images/tutorials/wizard/validation1.png"/></p> |
| |
| <li>Como opção, desabilite o botão "Next" se o campo do nome estiver vazio. Comece declarando um boolean na parte superior da classe: |
| |
| <pre class=examplecode> |
| private boolean isValid = true; |
| </pre> |
| |
| <p>A seguir, substitua <tt>isValid()</tt> da seguinte forma: |
| |
| <pre class=examplecode> |
| @Override |
| public boolean isValid() { |
| return isValid; |
| } |
| </pre> |
| |
| <p>E quando <tt>validate()</tt> for chamado, o que ocorre quando o botão "Next" é clicado, retorne falso: |
| |
| <pre class=examplecode> |
| @Override |
| public void validate() throws WizardValidationException { |
| |
| String name = component.getNameTextField().getText(); |
| if (name.equals("")) { |
| <b>isValid = false;</b> |
| throw new WizardValidationException(null, "Invalid Name", null); |
| } |
| |
| } |
| </pre> |
| |
| <p>Alternativamente, defina o boolean inicialmente como falso. A seguir, implemente <tt>DocumentListener</tt>, adicione um listener no campo e, quando o usuário digitar algo no campo, defina o boolean como verdadeiro e chame <tt>isValid()</tt>. |
| </ol> |
| |
| <p>Agora você já sabe como validar os dados introduzidos pelo usuário. |
| |
| <p class="tips"> Para obter mais informações sobre validação da entrada do usuário, consulte a amostra de Tom Wheeler ao final deste tutorial. |
| |
| <br /> |
| |
| <!-- ===================================================================================== --> |
| |
| <h2 class="tutorial"><a name="persist"></a>Persistindo dados nas reinicializações</h2> |
| |
| <p>Nesta seção, você aprende como armazenar os dados quando o aplicativo se fecha e como recuperá-los quando o assistente se abre após ser iniciado novamente. |
| |
| <ol> |
| |
| <li><p>Em <tt>DemoWizardPanel1.java</tt>, substitua os métodos <tt>readSettings</tt> e <tt>storeSettings</tt> da seguinte forma:</p> |
| |
| <pre class=examplecode> |
| <b>JTextField nameField = ((DemoVisualPanel1) getComponent()).getNameTextField(); |
| JTextField addressField = ((DemoVisualPanel1) getComponent()).getAddressTextField();</b> |
| |
| @Override |
| public void readSettings(Object settings) { |
| <b>nameField.setText(NbPreferences.forModule(DemoWizardPanel1.class).get("namePreference", "")); |
| addressField.setText(NbPreferences.forModule(DemoWizardPanel1.class).get("addressPreference", ""));</b> |
| } |
| |
| @Override |
| public void storeSettings(Object settings) { |
| ((WizardDescriptor) settings).putProperty("name", nameField.getText()); |
| ((WizardDescriptor) settings).putProperty("address", addressField.getText()); |
| <b>NbPreferences.forModule(DemoWizardPanel1.class).put("namePreference", nameField.getText()); |
| NbPreferences.forModule(DemoWizardPanel1.class).put("addressPreference", addressField.getText());</b> |
| } |
| </pre> |
| |
| </li> |
| |
| <li><p>Execute o módulo novamente e digite um nome e endereço no primeiro painel do assistente:</p> |
| <p><img border="1" src="../images/tutorials/wizard/nbpref1.png"/></p> |
| </li> |
| |
| <li><p>Feche o aplicativo, abra a janela Arquivos e analise o arquivo de propriedades dentro da pasta <tt>build</tt> do aplicativo. Você deveria encontrar agora as seguintes configurações:</p> |
| <p><img border="1" src="../images/tutorials/wizard/nbpref2.png"/></p> |
| </li> |
| |
| <li><p>Execute o aplicativo novamente e, da próxima vez que o assistente for aberto, as configurações especificadas acima serão automaticamente utilizadas para definir os valores nos campos do assistente.</p> |
| </li> |
| |
| </ol> |
| |
| <p>Agora você já sabe como fazer os dados do assistente persistirem depois das reinicializações. |
| |
| <br /> |
| |
| <!-- ===================================================================================== --> |
| |
| <h2 class="tutorial"><a name="brand"></a>Marcando o assistente</h2> |
| |
| <p>Nesta seção, você marca a string do botão "Next" (Próximo), fornecido pela infraestrutura, como "Advance" (Avançar). |
| |
| <p class="tips"> O termo "marcação" significa personalização, ou seja, trata-se normalmente de pequenas modificações dentro do mesmo idioma, enquanto que "internacionalização" ou "localização" significam a tradução para outro idioma. Para obter mais informações sobre a localização dos módulos NetBeans, <a href="http://translatedfiles.netbeans.org/index-l10n.html">consulte aqui</a>. |
| |
| <ol> |
| <li><p>Na janela Arquivos, expanda a pasta <tt>branding</tt> do aplicativo e crie a estrutura de pasta/arquivo realçada abaixo:</p> |
| |
| <p><img border="1" src="../images/tutorials/wizard/branding-1.png"/></p> |
| |
| </li> |
| <li>Defina o conteúdo do arquivo da seguinte forma: |
| |
| <pre class=examplecode> |
| CTL_NEXT=&Advance > |
| </pre> |
| |
| <p>Outras strings que poderiam ser marcadas são: |
| |
| <pre class=examplecode> |
| CTL_CANCEL |
| CTL_PREVIOUS |
| CTL_FINISH |
| CTL_ContentName |
| </pre> |
| |
| <p class="tips"> A tecla "CTL_ContentName" está definida como "Steps" por padrão, que é utilizada no painel esquerdo do assistente, caso a propriedade "WizardPanel_autoWizardStyle" não tenha sido definida como "FALSE". |
| |
| |
| </li> |
| <li><p>Execute o aplicativo e o botão "Next" estará marcado como "Advance":</p> |
| |
| <p><img border="1" src="../images/tutorials/wizard/branding-2.png"/></p> |
| |
| |
| |
| <p class="tips"> Como opção, utilize o arquivo <tt>DemoWizardAction.java</tt>, conforme descrito anteriormente, para remover todo o lado esquerdo do painel do assistente da seguinte forma: |
| |
| </p><pre class="examplecode"> wizardDescriptor.putProperty("WizardPanel_autoWizardStyle", Boolean.FALSE); |
| </pre> |
| |
| <p>As configurações acima têm como resultado um assistente com a seguinte aparência:</p> |
| |
| <p><img border="1" src="../images/tutorials/wizard/branding-3.png"/></p> |
| |
| </ol> |
| |
| <p>Agora você já sabe como marcar as strings definidas na infraestrutura do assistente com suas próprias versões marcadas. |
| |
| <br /> |
| |
| <!-- ===================================================================================== --> |
| |
| <h2 class="tutorial"><a name="further"></a>Leituras adicionais</h2> |
| |
| <p>Vários artigos sobre informações relacionadas estão disponíveis on-line: |
| |
| <ul> |
| <li><p>O site sobre NetBeans de Tom Wheeler (clique na imagem abaixo):</p> |
| <p><a href="http://www.tomwheeler.com/netbeans/"><img border="1" src="../images/tutorials/wizard/tom.png"/></a></p> |
| |
| <p class="tips"> Embora esteja escrito para o NetBeans 5.5, a amostra acima foi testada com êxito no NetBeans IDE 6.5.1 em Ubuntu Linux com JDK 1.6. |
| |
| <p>A amostra é especialmente útil para mostrar como validar os dados do usuário. |
| |
| <li>Blog do Geertjan: |
| <ul> |
| <li><a href="http://blogs.oracle.com/geertjan/entry/how_wizards_work">Como funcionam os assistentes: Parte 1—Introdução</a> |
| <li><a href="http://blogs.oracle.com/geertjan/entry/how_wizards_work_part_2">Como funcionam os assistentes: Parte 2—Tipos diferentes</a> |
| <li><a href="http://blogs.oracle.com/geertjan/entry/how_wizards_work_part_3">Como funcionam os assistentes: Parte 3—Seu primeiro assistente</a> |
| <li><a href="http://blogs.oracle.com/geertjan/entry/how_wizards_work_part_4">Como funcionam os assistentes: Parte 4—Seu próprio repetidor</a> |
| <li><a href="http://blogs.oracle.com/geertjan/entry/how_wizards_work_part_5">Como funcionam os assistentes: Parte 5—Reutilizando e incorporando painéis existentes</a> |
| <li><a href="http://blogs.oracle.com/geertjan/entry/creating_a_better_java_class">Criando um melhor assistente para classe Java</a> |
| </ul> |
| |
| </ul> |
| |
| <br /> |
| |
| |
| |
| <h2><a name="version"></a>Versionamento </h2> |
| |
| <p> |
| |
| <table width="76%" border="1"> |
| <tbody> |
| <tr> |
| <td> |
| <div align="left"><b>Versão</b></div> |
| </td> |
| <td> |
| <div align="left"><b>Data</b></div> |
| </td> |
| <td> |
| <div align="left"><b>Alterações</b></div> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| 1 |
| </td> |
| <td> |
| 31 de março de 2009 |
| </td> |
| <td> |
| Versão inicial. A fazer: |
| |
| <p><ul> |
| <li><strike>Adicionar uma seção sobre validação da entrada do usuário.</strike> |
| <li><strike>Adicionar uma seção sobre armazenamento/recuperação de dados para/do assistente.</strike> |
| <li>Adicionar uma tabela que lista todas as propriedades do WizardDescriptor. |
| <li>Adicionar uma tabela que lista e explica todas as classes API do assistente. |
| <li>Adicionar links ao Javadoc. |
| </ul> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| 2 |
| </td> |
| <td> |
| 1 de abril de 2009 |
| </td> |
| <td> |
| Adicionada uma seção de validação, com o código para a desabilitação do botão "Next" (Próximo). Adicionada também uma seção sobre persistência. |
| </td> |
| </tr> |
| <tr> |
| <td> |
| 3 |
| </td> |
| <td> |
| 10 de abril de 2009 |
| </td> |
| <td> |
| Comentários integrados por Tom Wheeler, reescrevendo a seção sobre marcação para que seja realmente sobre marcação, com uma referência sobre onde as informações sobre localização podem ser encontradas. |
| </td> |
| </tr> |
| |
| </tbody> |
| </table> |
| |
| </body> |
| |
| </html> |