ActionListener e Vetor de JButton [RESOLVIDO]

3 respostas
C
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.
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();
    }
}

3 Respostas

G

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?

V

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

C

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 !!

Criado 17 de setembro de 2012
Ultima resposta 26 de set. de 2012
Respostas 3
Participantes 3