[RESOLVIDO]Criar botões dentro de um for em java

Oi, gente!
Estou desenvolvendo um jogo em java, no qual preciso criar vários botões, pois a lógica do jogo fica em torno de que botão o jogador clicou. Não compensa ir criando um a um. Então pensei em criar os botões dentro de um for. O único problema é que não sei como dar, a cada um dos botões, uma propriedade que os diferencie, de modo que eu possa depois, saber em que botão o jogador clicou.

Quero fazer algo mais ou menos assim:

Panel Botoes = new Panel();
GridLayout LayoutBotoes = new GridLayout(7,7);
Botoes.setLayout(LayoutBotoes);

for(int l=0;l<7;l++){
for(int c=0;c<7;c++){
Button [color=red]B+l+c[/color] = new Button;
Botoes.add(B+l+c);
}
}

Desse modo, eu teria o nome do botão como sendo B01, se o jogador tivesse clicado no botão que está na linha 0 e na coluna 2. Entenderam?
Mas na hora de criar o botão com nome [color=red]B+l+c[/color], ele da erro. Alguém pode me ajudar? Existe uma outra propriedade, além do nome, com a qual eu possa diferenciar os botões?

Desde já agradeço :smiley:

Oi.

Quando for postar códigos, use a tag code, como descrito aqui:

Quanto à sua dúvida. Primeiro, não é possível usar o sinal de + no nome de uma variável. +, no java, significa soma.

Há duas formas de diferenciar os botões.
a) Você pode criar um Array ou list de botões, e usa-los pelo índice (melhor alternativa, na minha opinião);
b) Você pode alterar a propriedade name do botão.

Veja um exemplo:

Panel pnlBotoes = new Panel(); GridLayout layoutBotoes = new GridLayout(7,7); pnlBotoes.setLayout(layoutBotoes); Button botoes[][] = new Button[7][7]; for(int l=0;l<7;l++){ for(int c=0;c<7;c++){ botoes[i][c] = new Button(); pnlBotoes.add(botoes[i][c]); } }

Note que agora você só precisa fazer algo como botoes[1][1] para acessar um botão.

Outra coisa. Cuidado com a convenção de nomes do Java. Variáveis começam com letras minúsculas. A primeira maiúscula usamos apenas em nomes de classes. Além disso, não se deve mais usar AWT hoje em dia. Procure passar seu código para Swing (vc vai usar classes como JButton no lugar de Button).

A classe Button tem um construtor que pegar o parametro nome, talvez vc possa usar esse.
Ai vc pega o nome do botao no event listener e faz o que tem que fazer.

Exemplo:

import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ButtonTest {

	public ButtonTest() {
	
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
		frame.setLayout(new FlowLayout());
	
		for (int i = 0 ; i <= 4; i++) {			
			String name = "button" + Integer.toString(i);
			Button b = new Button(name);
			b.setActionCommand(name);
			b.addActionListener( new ActionListener() {				
				public void actionPerformed(ActionEvent e) {
                    // e.getActionCommand() vai retornar o nome do botao que vc clicou.
					System.out.println("Button clicked: " + e.getActionCommand());
				}				
			});		
			
			frame.add(b);
		}
	
		frame.setSize(400, 200);
		frame.setVisible(true);	
	}

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

//Daniel

Muito obrigada pelas dicas e respostas, pois funcionou! ;D
De qualquer forma, acho que vou migrar para a swing.

:wink: