Pessoal, qual seria a melhor prática para se criar eventos em componentes swing?
Por exemplo, criar uma classe separada para tratar cada listener? Da um .add(new Lister(){…}) criando assim uma innerClass ou ainda implementar no JFrame da vida a interface do evento e ficar comparando qual com if else qual a fonte do evento?
[quote=renatocustodio]Pessoal, qual seria a melhor prática para se criar eventos em componentes swing?
Por exemplo, criar uma classe separada para tratar cada listener? Da um .add(new Lister(){…}) criando assim uma innerClass ou ainda implementar no JFrame da vida a interface do evento e ficar comparando qual com if else qual a fonte do evento?[/quote]
Por ordem decrescente de “boa pratica”
Criar um classe listener separada - extendendo um Listener adapter se existir - e registrar uma instancia dela com o objeto que levanta o evento. Registrar a mesma instancia com todos os objetos que levantam eventos que são tratados a mesma forma: por exemplo: menu sair e botão na toolbar para sair e apertar x na tela principal
Associar a esta classe listener um comando a ser executado. Isto é o padrão Mediator+Command.
1.1) Usar Action sempre que possivel. Ela faz o trabalho descrito antes e é padrão do Swing. Além disso quando associada a botões permite desabilitar todos os comandos que fazem a mesma coisa ( ou seja, desabilitando a action ela desabilita o botão da toolbar e o item de menu ao mesmo tempo)
O mesmo que antes mas com inner-class. Com inner-class é mais dificil usar a mesma instancia para ouvir eventos em “lugares” diferentes e por isso menos recomentado
Fazer o JFrame/JPanel/etc… implementar o listener directamente. Este é um anti-pattern. NUNCA faça isto.
A razão é simples. Se JFrame é um ActionListener eu posso registrá-lo em qualquer lugar para ouvir qualquer evento, mesmo com objetos de outro JFrame…