Reconhecer botão que chama evento

Pessoal, uma dúivda simples:

Exemplo:

Criei um loop que cria uma matriz de JButtons.
Para cada botão gostaria de aplicar um evento, que ao clicar muda a cor de fundo para azul.

O problema é:

Como eu faço para que o evento reconheça quem chamou o evento?

Não posso colocar esse evento no loop, senão ele vai setar a cor de todos os botões quando eu clicar em um, certo?

E também não tem como usar o getSource(), senão eu terei que usar if para comparar botão por botão da matriz.

Tem alguma outra solução?

Obrigado.

Não há problema em usar o getSource(). Esse método retorna de onde foi chamado o evento. Logo, se você clicou no Botão X, ele te retorna esse mesmo botão!
Isso resolve seu problema?[code]public class FormularioDinamico extends JFrame {

public static void main(String[] args) {
    FormularioDinamico formularioDinamico = new FormularioDinamico();
    formularioDinamico.exibirFormulario();
}

public FormularioDinamico() {

    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout(FlowLayout.LEFT));
        setTitle("Formulário dinâmico!");
        setResizable(false);

        for (int I = 0; I < 10; ++I) {

            JButton buttonToFillBackground = new JButton("Botão " + (I + 1));
            buttonToFillBackground.addActionListener(new BotaoDinamicoActionListener(this));
            add(buttonToFillBackground);
        }
    }
    catch (Exception generalException) {
        generalException.printStackTrace();
    }
}

public void exibirFormulario() {
    pack();
    setLocationRelativeTo(null);
    setVisible(true);
}

private class BotaoDinamicoActionListener implements ActionListener {

    private JFrame formularioPai;
    public BotaoDinamicoActionListener(JFrame formularioPai) {
        this.formularioPai = formularioPai;
    }
    public void actionPerformed(ActionEvent e) {
        JButton clickedButton = (JButton) e.getSource();
        clickedButton.setForeground(Color.RED);
        clickedButton.setText("Mudou o texto!");
        formularioPai.pack();
    }
}

}[/code]

Espero ter ajudado,
fique com Deus! :smiley:

Então, meu código que cria os botões está assim:

[code]
private JButton[] caixas = new JButton[5];

for (int i=0,a=15;i<=4;i++,a+=45){
caixas[i] = new JButton();
caixas[i].setBounds(a,30,30,30);
getContentPane().add(caixas[i]);

}
[/code];

Como posso implementar a parte do evento que eu falei ?

Obrigado

[quote=Soruji]Então, meu código que cria os botões está assim:

[code]
private JButton[] caixas = new JButton[5];

for (int i=0,a=15;i<=4;i++,a+=45){
caixas[i] = new JButton();
caixas[i].setBounds(a,30,30,30);
getContentPane().add(caixas[i]);

}
[/code];

Como posso implementar a parte do evento que eu falei ?

Obrigado[/quote]

[code]private JButton[] caixas = new JButton[5];

for (int i=0,a=15;i<=4;i++,a+=45){       
    caixas[i] = new JButton();       
    caixas[i].setBounds(a,30,30,30);      
    caixas[i].addActionListener(new ActionListener(this) {
        private JFrame formularioPai;  
        public BotaoDinamicoActionListener(JFrame formularioPai) {  
            this.formularioPai = formularioPai;  
        }  
        public void actionPerformed(ActionEvent e) {  
            JButton clickedButton = (JButton) e.getSource();  
            clickedButton.setForeground(Color.RED);  
            clickedButton.setText("Mudou o texto!");  
            formularioPai.pack();  
        }  
    }); 
    getContentPane().add(caixas[i]);
}[/code]

Assim!

Espero ter ajudado,
fique com Deus! :smiley: