Ajuda para entender arquivo de propriedades


/* 

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:

  1. 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;
  2. O Swing informa (invoca) todos os listener registrados.
  3. 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.