Galera, como eu faço pra colocar os eventos em uma classe separada da que monta minha GUI? Se tem jeito, como devo proceder?
Desde já agradeço qualquer ajuda.
Separar GUI dos seus eventos
4 Respostas
luiz_ross, vc mesmo postou uma mensagem alguns dias atrás +/- sobre isso. (clique aqui)
Na verdade utilizar estensões de AbstractAction é a maneira oficial para se separar código de construção da GUI de código da lógica da coisa.
É muito útil por que você pode ter um item de menu e um botão de uma toolbar que fazem a mesma coisa…, então, por exemplo, se você desabilita a função (na verdade você desabilitará a Action) a classe abstrata AbstractAction já faz o favor de desabilitar os componentes que foram registrados com essa Action.
Tinha me esquecido que eu mesmo havia postado essa dúvida esses dias atrás, valeu por ter me lembrado.
Vc tem um exemplo simples de como usar essa classe abstrata, eu ainda não tenho o conceito de quando utilizar e de como utilizar classes abstratas, então é meio vago pra mim alguém falar usa essa classe abstrata.
Realmente não é simples pensar orientado à objetos. Mas vou tentar te dar um “overview”:
A classe abstrata, AbstractAction, implementa uma série de funcionalidades. Entre elas está, só pra ilustrar, a característica de habilitar/desabilitar essa ação (Action).
Sendo assim, imagine o seguinte cenário: você tem um item de menu (JMenuItem) e um botão (JButton) em um JToolBar. Esses componentes tem o mesmo objetivo – digamos exibir um diálogo (JDialog).
Se você instalar ouvintes de eventos (listeners) para esses componentes, então no futuro, você terá que se preocupar com coisas simples como habilitar ou desabilitar esses componentes…; assim: suponha que num determinado momento esse diálogo não possa ser exibido; então o item de menu e botão da barra de ferramentas deverão estar desabilitados.
Sendo assim, usando listeners individuais, você terá que desabilitar/habilitar esses componentes manualmente:
menu.setEnabled(false);
botao.setEnabled(false);
Por outro lado, se você usar uma Action (na verdade, uma classe que estenda a classe AbstractAction), você só tem que fazer:
acao.setEnabled(false);
Aí é que entra a classe AbstractAction.
Como essa classe é abstrata, você não pode instanciá-la. Sendo assim, você tem que criar uma classe que a estenda. Como a classe AbstractAction implementa a interface Action, ela possui um método (também não implementado, por isso a classe é abstrata) chamado actionPerformed().
Como você, a sua classe que estende a AbstractAction deverá implementar o método actionPerformed().
Se você voltar e ver aquele exemplo que eu te dei no outro tópico, talvez fique mais claro.
Tipo, eu acho que to começando a entender esse negócio de usar a classe AbstractAction, eu comprei o Core JAVA Vol 1 e nele tem um exemplo, só que esse exemplo utiliza JButton e eu queria usar JTextFields,
o que eu ainda não consegui fazer é pegar o dado digitado no campo utlizando actions. Eu sei fazer da forma normal que é executar a ação de pegar o dado digitado dentro da própria classe que monta GUI.