/*
Para quem usa netbeans, esse é um dos exemplos de aplicativo java da versão 6.5.
É o seguinte:
eu estava olhando o exemplo DocumentEditorView e não entendi como os botões do Frame principal funcionam sem uma referência direta, ou seja,
botao.addActionListerner(new ActionListerner()
public void actionPerformed(ActionEvente e){
implementação
}
);
O que tem lá é, por exemplo,
@Action
public Task open() {
JFileChooser fc = createFileChooser("openFileChooser");
int option = fc.showOpenDialog(getFrame());
Task task = null;
if (JFileChooser.APPROVE_OPTION == option) {
task = new LoadFileTask(fc.getSelectedFile());
}
return task;
}
e um arquivo .properties que desconheço o funcionamento.
Aqui pus um trecho que acredito fazer referência ao botao open
Exemplo
open.Action.text = &Open...
open.Action.icon = open.png
open.Action.accelerator = control O
open.Action.shortDescription = Open a file
openToolBarButton.text=
openMenuItem.icon=${null}
O que quero saber é:
1° - É esse arquivo que faz os botões funcionarem;
2° - @action tem alguma coisa a ver com isso;
3° - onde posso encontrar informação sobre esse tipo de arquivo (.properties) e como usá-lo numa aplicação;
Encontrei um tutorial aqui no guj e em outros sites que pra mim foi chover no molhado.
Gostaria de enviar o exemplo do netbeans, mas não é possível anexá-lo à esta mensagem.
Desde já agradeço.
*/
São várias perguntas…
vamos por parte:
um arquivo properties geralmente é utilizado para armazenar as configurações da aplicação, ele normalmente é um mapa de strings (chave = valor).
No java, você pode usar os arquivos properties para facilitar a internacionalização da aplicação, como exemplo, veja o programa SwingSet2 que deve estar na pasta demo/jfc (que vem junto com o jdk). Ou então, veja esses links:
http://java.sun.com/developer/technicalArticles/Intl/ResourceBundles/
http://java.sun.com/docs/books/tutorial/i18n/resbundle/propfile.html
ou em:
http://java.sun.com/javase/technologies/core/basic/intl/faq.jsp
Com relação as actions e funcionamento dos botões, acho que você deve compreender primeiro o seguinte esquema.
Em uma linguagem por Eventos (Delphi, VB), quando o usuário clica em um botão, o SO envia para a aplicação um evento para ela tratar. Em linguagem OO não se espera esse tipo de operação diretamente. No java, ocorre o seguinte. Cria-se um “listener” (uma thread de baixa prioridade (ver mais em EventQueue - http://java.sun.com/j2se/1.4.2/docs/api/java/awt/EventQueue.html) que fica esperando o clique), quando essa thread detectar a ação ela irá executar um procedimento específico do seu código. O método a ser chamado deve implementar a interface ActionListener.
Bom o código do netbeans nesse caso não é muito bom, veja o que ele está fazendo:
botao.addActionListerner(new ActionListerner()
public void actionPerformed(ActionEvente e){
implementação
}
);
No comando botao.addActionListerner ele adiciona um listener para executar a ação do botão, observe que pode existir mais de um listener para o mesmo botão. O listener nesse caso é uma instância da classe anônima criada no meio do código, dessa forma:
new ActionListerner()
public void actionPerformed(ActionEvente e){
implementação
}
Observe que os comandos que você colocar dentro do método actionPerformed poderão acessar as propriedade e métodos da sua classe (mesmos os private), por ser parte da classe, na realidade por ser uma classe interna (inner class - http://java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html).
Acho que agora você compreende como funciona o fluxo de execução, em resumo:
- O usuário clica em um botão, o SO gera uma notificação, a VM inclui essa notificação como um Event no EventQueue do Swing;
- O Swing informa (invoca) todos os listener registrados.
- A implementação do método actionPerformed é de sua responsabilidade e nele que você irá chamar ou executar a action especifica.
Com relação ao exemplo do @Action que é uma anotação incluída no Java 5, você irá compreender melhor aqui:
http://java.sun.com/developer/technicalArticles/javase/swingappfr/
Bom eu falei que o exemplo do NetBeans é ruim, veja duas possibilidade um pouco melhor:
Fazer com que a sua classe que especializa de um JFrame ou JDialog implement o ActionListener e ai você coloca assim a referência dos botões:
botao.addActionListener( this );
Segunda forma (melhor ainda):
Cria uma classe a parte que implementa a ActionListener e você cria uma instância dela dentro da sua classe Frane. E cada Action em classes separadas ao invés do código espaguete…
Tem um tutorial bom de um artigo do Fernando Lozano (http://www.lozano.eti.br/artigos.html)
att
É bom falar com quem sabe! Valeu, vou dar uma olhada.