Alguem ai me ajude!

9 respostas
L

Olá… essa é minha primeira pergunta aki no forum… c não tiver mto clara soh dizer ki eu tento arrumar…

Tenho uma classe principal, com um array de 9 buttons (b[]). Os eventos ActionListener dos botões eu quero que fique em outra classe separada.

// Adicionando na Classe Principal os ActionListener
for(i=0; i <= b.length - 1; i++) b[i].addActionListener(new Eventos());

Aki eu fiz um loop para adicionar os ActionListener a cada um dos indices dos botoes.

// Classe Evento (Inteira)

public class Eventos{

public Eventos(){

}

public void ActionPerformed(ActionEvent e){

if (e.getSource()== b[1]) JOptionPane.showMessageDialog(null, Deu certo”, Ex”, 2);

}

}

Acontece que a classe Eventos diz que a variavel b é desconhecida, e o metodo principal diz que não estou passando argumentos validos para a classe Eventos.
Já tentei passar por parametros o b[], mas não deu mto certo.
O que eu estou fazendo de errado??? Se alguem puder me ajudar…
QQ coisa meu msn é [email removido]

[]´s
Rodrigo

9 Respostas

B

Olá Lord!!! Bem vindo ao PJ!

Pq você quer fazer isso usando duas classes? Algum trabalho de faculdade e o prof. pediu para fazer duas classes? Seria mais fácil você fazer na mesma classe.

www.editoraerica.com.br

procure por downloads.

lá tem exemplos de todo o tipo!

S

acho que se fizer assim funciona:

e.getSource().toString == "NomeDoBotao"

flws

S

Corrigindo:

e.getSource().toString() == "NomeDoBotao"
L

Hum…
Bejeto… Estou fazendo deste jeito para poder reaproveitar esta classe de
Eventos posteriormente, eu consegui fazer funcionar se eu utililar o evento ActionListener na mesma classe.

O meu problema é que a classe evento não esta enchergando o vetor b[]. E a classe Principal diz que estou passando parametros incorretos…
Melhorou ou ficou mais confuso ainda???

[]´s

B

o erro eu tinha entendido!!!

tente declarar o vetor b como public

public Object[] b;
J
<blockquote><div class="quote-author">“Lord_Voldemort”:</div>

public class Eventos{

public Eventos(){

}

public void ActionPerformed(ActionEvent e){

if (e.getSource()== b[1]) JOptionPane.showMessageDialog(null, Deu certo”, Ex”, 2);

}

} </blockquote>

nao sei se é o seu problema, (acho que voce se distraiu ao postar essa mensagem aqui no forum), mas o nome correto do metodo seria:

public void actionPerformed(ActionEvent e)

com iniciais minusculas, seguindo todo o padrao java…

uma sugestao minha é que voce use apenas um listener para todos os botoes…assim:

Eventos listener = new Eventos();
for(i=0; i <= b.length - 1; i++) b[i].addActionListener(listener);

quanto ao problema de nao reconhecer a variavel, talvez voce pudesse colocar b como public, e passar sua classe principal no construtor de Eventos, e Eventos teria um ClassePrincipal dentro dele para receber isso, assim:

public class ClassePrincipal {
//...
public JButton[] b;
//...
   Eventos listener = new Eventos(this);
   for(i=0; i <= b.length - 1; i++) b[i].addActionListener(listener);
//...
//...
}

e a classe Eventos:

public class Eventos{
   private ClassePrincipal cP;

public Eventos(ClassePrincipal c){
   this.cP = c;
}

public void actionPerformed(ActionEvent e){

if (e.getSource()== this.cP.b[1]) JOptionPane.showMessageDialog(null, "Deu certo", "Ex", 2);
}
}

espero ter ajudado

R

Num sei se pode ser isso, mas essa tua classe Eventos tem que implementar ActionListener, ou não??? Axo que vale a pena tentar!

Valeu

J

bem lembrado, romulinho…

L

Achei a solução num livro…
É necessario instanciar a classe Eventos… e na classe evento tambem é necessario implementar o ActionListener…

Mas… valew mesmo assim… :grin:

Criado 6 de maio de 2005
Ultima resposta 11 de mai. de 2005
Respostas 9
Participantes 5