ActionListener e Vetor de JButton [RESOLVIDO]

Sou iniciante em java, e não achei a minha duvida neste fórum.
Tenho um vetor de JButtons e adicionei ActionListener em cada um deles, e gostaria que ao “clik” do mouse em algum dos botões, apenas este se modificasse (mudaria o ícone do botão), só que eu não sei como identificar qual botão foi “clikado”, para que apenas este seja mudado.
O programa a seguir muda o ìcone de todos os botões através de um for.
Não sei estou indo pelo melhor caminho.

[code]import javax.swing.;
import java.awt.
;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Interface extends JFrame implements ActionListener{

JPanel painel = new JPanel();

JButton[][] botao = new JButton[10][10];

public void inicializarBotoes() {
	for(int cont1 = 0; cont1 < botao.length; cont1++){
		
		for(int cont2 = 0; cont2 < botao[cont1].length; cont2++) {
			
			botao[cont1][cont2] = new JButton();
		}
	}
}

public void determinarTamanhoBotoes() {
	for(int cont1 = 0; cont1 < botao.length; cont1++){
		
		for(int cont2 = 0; cont2 < botao[cont1].length; cont2++) {
			
			botao[cont1][cont2].setPreferredSize(new Dimension(25, 25));
		}
	}
}

public void adicionarEvento() {
	for(int cont1 = 0; cont1 < botao.length; cont1++){
		
		for(int cont2 = 0; cont2 < botao[cont1].length; cont2++) {
			
			botao[cont1][cont2].addActionListener(this);
		}
	}
}

public void actionPerformed(ActionEvent event){
	for(int cont1 = 0; cont1 < botao.length; cont1++){
	
		for(int cont2 = 0; cont2 < botao[cont1].length; cont2++) {
			
			botao[cont1][cont2].setIcon(new ImageIcon("Caminho da Imagem"));
		}
	}
}

public void adicionarBotoes() {
	
	painel.setLayout(new GridLayout(10, 10));
	
	for(int cont1 = 0; cont1 < botao.length; cont1++){
		
		for(int cont2 = 0; cont2 < botao[cont1].length; cont2++) {
			
			painel.add(botao[cont1][cont2]);
		}
	}
	getContentPane().add(painel);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    
    pack();  
    setVisible(true);
}

public static void main(String args[])  
{
	Interface teste = new Interface();
	teste.inicializarBotoes();
	teste.adicionarEvento();
	teste.determinarTamanhoBotoes();
	teste.adicionarBotoes();
}

}
[/code]

Cara, veja o parâmetro event do método actionPerformed. Ele retorna o objeto que é a fonte do evento (no caso o botão que foi clicado) através do método event.getSource().

Se você for usar o método actionPerformed da classe de interface apenas nos botões, então você tem certeza que a fonte do evento é um botão. Daí tu pode fazer um cast do objeto para JButton sem medo.

public void actionPerformed(ActionEvent event){ JButton botao = (JButton)event.getSource(); botao.setIcon(new ImageIcon("img\\images1.jpg")); }

Qualquer coisa avisa aí.

PS.: Só por curiosidade: tu pretende fazer um jogo do Campo Minado?

1 curtida

Tópico movido para o fórum de interface gráfica.

Cara muito obrigado, deu certo usando o método event.getSource(), e respondendo sua pergunta, sim eu estava fazendo um campo minado.

ViniGodoy da próxima vez prestarei mais atenção onde devo postar as minhas duvidas.

Obrigado, pela ajuda !!