Reconhecer JButton em matriz

10 respostas
E

Olá… Sou novo no fórum e preciso de uma ajuda em um trabalho…
Criei uma matriz de JButtons e não consigo reconhecer o JButton clicado. Preciso colocar um evento nele.
Se puderem me ajudar!!
Vlw

10 Respostas

InSeOfKn

existe vários modos

mais o que eu acho mais conveniente é criar um 2 loop para percorrer todos os objetos da matriz e dar um addActionListener(this); para todos eles

dai você implementa a interface ActionListener e implementa o seu metodo actionPerformed

DICA: usar o getSource() para identificar qual botão disparou o evento e até mesmo usar os seu métodos como o getText() para pegar o texto do JButton

até

InSeOfKn

resolvi para deixar mais claro fazer um exemplo e ai vai

public class matrisDeBotoes extends JFrame implements ActionListener{

	
	public static JButton[][] matrizBotoes;

	public matrisDeBotoes(){
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		matrizBotoes = new JButton[2][2];
		
		getContentPane().setLayout(new GridLayout(2,2));
		
		for(int i=0; i<matrizBotoes.length; i++){
			for(int j=0; j<matrizBotoes[i].length; j++){
				matrizBotoes[i][j] = new JButton();
				matrizBotoes[i][j].setText("Botão da linha "+(i+1)+" coluna "+(j+1));
				matrizBotoes[i][j].addActionListener(this);
				getContentPane().add(matrizBotoes[i][j]);
			}
		}
		setSize(500,300);
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new matrisDeBotoes();

	}

	@Override
	public void actionPerformed(ActionEvent e) {
		((JButton)e.getSource()).setEnabled(false);
		JOptionPane.showMessageDialog(this, ((JButton) e.getSource()).getText()+" foi clicado");
		((JButton)e.getSource()).setText("Já clicado");		
	}

}

se não entender algo e só perguntar

até!

E

Cara Valew mesmo… entendi como funciona… Mas ta com erro no "matrizBotoes[i][j].addActionListener(this);"

Tentei fazer do jeito que está no seu

public class JogoMatriz extends JFrame implements ActionListener mas também da erro…

Tem como me ajudar com isso?

InSeOfKn

estranho aqui funcionou legal

você fez todos os imports?
posta o erro aqui pra nos possamos corrigir o código

até

E

Olha o erro:

C:\Users\Edgar\Desktop\trabalho\Jogo da memoria\jogo.java:56: addActionListener(java.awt.event.ActionListener) in javax.swing.AbstractButton cannot be applied to (classes.JogoMemoria) bot[i][j].addActionListener(this);

Valew pela força!!

InSeOfKn

não consegui entender o erro (não sou bom com isso hahaha) poderias postar o código completo da sua class para eu rolar aqui e tentar localizar o erro
só uma pergunta você esta usando alguma IDE? se estiver ela não acusou nenhum erro antes de você compilar?

E
Eu tenho que fazer um jogo de memória. Mas mal comecei.. Dá uma olhada no código..
package classes;
import javax.swing.*; 
import java.awt.*;
import java.awt.image.*; 
import java.awt.event.*;
import java.util.Random;
import javax.swing.event.*;

class JogoMemoria extends JFrame {

	JButton[][]bot;
        JLabel l1;
	
JogoMemoria(){

		super("Jogo da Memória");
		setSize(600,400); 
		setVisible(true);
		setLayout(new GridLayout(5,5));
        	configuraJogo();
}

	public void configuraJogo(){
		
		l1 = new JLabel("");
		bot  = new JButton[5][5];  		
		
int a=10;
for(int i=0;i<5;i++){
int b=10;
for(int j=0;j<5;j++){
	bot[i][j]= new JButton("");
	bot[i][j].addActionListener(this);
    getContentPane().add(bot[i][j]).setBounds(a,b,45,45);
b=b+60;
}
a=a+60;
}  
 	
public void actionPerformed(ActionEvent e) {  
        ((JButton)e.getSource()).setEnabled(false);  
        JOptionPane.showMessageDialog(this, ((JButton) e.getSource()).getText()+" foi clicado",ALERT.Message);  
        ((JButton)e.getSource()).setText("Já clicado");       
    }  
});
		setLocationRelativeTo(null); 
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
		setIconImage(new ImageIcon("icons/flash.png").getImage());
}

	public static void main(String[] args)
	{
		new JogoMemoria();
	}
}

Valew!!

E

Ahh eu uso o JCreator!!
Vlw

InSeOfKn

a única coisa que notei de errado é que você não implementou ActionListener e não entedi p porque do actionPerformed dentro do construtor (se ele é um novo método) você deve ter confundido com quando se cria a ActionListener dentro do addActionListener e se sobre escreve o método actionPerformed esse o outro modo só que teria que ser aplicado a cada JButtun o modo que propus é um actionPerformed para todos os JButtuns mas de qualquer modo o código ta corrigido ai em baixo até

import javax.swing.*;   
import java.awt.*;  
import java.awt.image.*;   
import java.awt.event.*;  
import java.util.Random;  
import javax.swing.event.*;  

@SuppressWarnings("serial")
class JogoMemoria extends JFrame implements ActionListener{  

	JButton[][]bot;  
	JLabel l1;  

	JogoMemoria(){  

		super("Jogo da Memória");  
		setSize(600,400);   
		setVisible(true);  
		setLayout(new GridLayout(5,5));  
		configuraJogo();  
	}  

	public void configuraJogo(){  

		l1 = new JLabel("");  
		bot  = new JButton[5][5];         

		int a=10;  
		for(int i=0;i<5;i++){  
			int b=10;  
			for(int j=0;j<5;j++){  
				bot[i][j]= new JButton("");  
				bot[i][j].addActionListener(this);  
				getContentPane().add(bot[i][j]).setBounds(a,b,45,45);  
				b=b+60;  
			}  
			a=a+60;  
		}  
		setLocationRelativeTo(null);   
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
		setIconImage(new ImageIcon("icons/flash.png").getImage());   
	}
	public void actionPerformed(ActionEvent e) {    
		((JButton)e.getSource()).setEnabled(false);    
		JOptionPane.showMessageDialog(this, ((JButton) e.getSource()).getText()+" foi clicado");    
		((JButton)e.getSource()).setText("Já clicado");         
	}       

	public static void main(String[] args)  
	{  
		new JogoMemoria();  
	}  
}

OBS: nunca usei JCreator mais eu recomendo eclipse

E

Valew pela ajuda cara… Vou ver o que vira agora…
Obrigado

Criado 9 de novembro de 2010
Ultima resposta 10 de nov. de 2010
Respostas 10
Participantes 2