Sim. Procure pelo padrão de objetos Observer.
Aqui tem um exemplo:
[quote=macario1983]eu estava verificando possibilidad de deixar o codigo menos direcionados ao componentes criados, por exemplo
tenho 3 jTextField
jTextField1
jTextField2
jTextField3
e ai trabalhei usando for nos componentes e cast pelo tipo verificando se é o tipo daquele objeto usando instanceof[/quote]
Não entendi nada. Geralmente você não precisar usar instanceof, já que cada componente dispara seu próprio evento e tem seu próprio listener.
O pessoal costuma a fazer uma besteira aqui no GUJ, que é fazer todos os componentes apontarem para o mesmo listener. Isso força o cara a ter que testar a origem do evento, o que é enfadonho, sujeito a erros e desnecessário, se você codificar direito.
Listener (ouvinte) “escuta” o evento, por exemplo o clique em um botão e realiza a ação definida no método actionPerformed.
Não entendi o que quis dizer com componentes criados… Se for referente a usar JPanel, JButton, J… etc. não vai contra umas das ideias da POO de reaproveitar o máximo possível e evitar “reinventar” a roda ?
Quanto a questão do painel se tornar dono do componente criado… não sei se seria essa a definição correta, no entanto é o Gerenciador de Layout do Painel que vai decidir sobre o tamanho e o local dos componentes adicionados a ele, assim como o Gerenciador de Layout da moldura , por exemplo o JFrame , que fica responsável por decidir sobre o tamanho e o local dos componentes adicionados a ele, por exemplo o Painel.
Me desculpe se eu estiver enganado, também sou novato em java, mas como decidi fazer parte da comunidade GUJ por causa das boas respostas e informações passadas pelos outros membros, resolvi também tentar contribuir com o que eu souber. Afinal, também pode ser uma forma de aprender.
Adicionar o listener diretamente em um componente é criar uma classe anônima (que é uma coisa que foi criada pela Sun, atual Oracle, só para isso mesmo - facilitar a codificação de listeners para componentes Swing e AWT).
Algo como:
JButton jbt = new JButton();
...
jbt.addActionListener (new ActionListener() {
...
[quote=entanglement]Adicionar o listener diretamente em um componente é criar uma classe anônima (que é uma coisa que foi criada pela Sun, atual Oracle, só para isso mesmo - facilitar a codificação de listeners para componentes Swing e AWT).
Algo como:
[code]
JButton jbt = new JButton();
…
jbt.addActionListener (new ActionListener() {
…
[/code][/quote]
hum…ok
seria criar uma classe a parte…pq do modo que vi o professor fazendo…era direto na mesma classe
ate o netbeans sugere que pode haver um vazamento de memoria do construtor
Eu sei de onde vem esse erro. São alguns professores que aprenderam Java na versão 1.0, quando isso era necessário.
Uma vez que introduziram o recurso de classes anônimas na versão 1.1 (olhe, nesse tempo a Microsoft ainda licenciava o Java da Sun ), isso deveria ter sido abolido - ter N componentes sendo tratados no mesmo listener. É realmente confuso.