Arrays de JButton - Qual que clicou?

Amigos tenho um frame com um arrays de JButtons na minha tela. Como saber qual botao que foi acionado " que chamou o metodo abaixo " ??

  private void cmdBotao_actionPerformed(ActionEvent e) {
      JOptionPane.showMessageDialog(null, "O Botao é ??? ");
  }

este é código completo

public class Frm extends JFrame {
  private JButton[] botoes=new JButton[40];
  private int valor;
  public static void main (String [] args){
        new Frm().setVisible(true);
  }
  public Frm(){
        try {
            jbInit();
        } catch (Exception e) {
        }
    }
  private void jbInit() throws Exception{
    this.setSize(new Dimension(550, 500));
    this.getContentPane().setLayout(new GridBagLayout());
    int x=0; int y=0;
    
    for(int b=0;b<botoes.length;b++){
      if(x>6){
          x=0;
          y++;
      }
        
      botoes[b]=new JButton("Bt." + b );
      botoes[b].setPreferredSize(new Dimension(100,100));
      this.getContentPane().add(botoes[b], new GridBagConstraints(x, y, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
                  new Insets(2, 2, 2, 2), 0, 0));
        
      botoes[b].addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  cmdBotao_actionPerformed(e);
              }
          });
      x++;
    }
    
  }
  private void cmdBotao_actionPerformed(ActionEvent e) {
      JOptionPane.showMessageDialog(null, "O Botao é ??? ");
  }
}

Obrigado!!!

O que é:

botoes[b].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cmdBotao_actionPerformed(e); } });
Esse código deveria estar num looping, tipo:

for(int i = 0; i &lt; 40; i++){
			botoes[i] = new JButton(String.valueOf(i+1));
			pane.add(botoes[i]);
			bHandler = new ButtonHandler();
			botoes[i].addActionListener(bHandler);
}  

Seu tratador + ou - assim:

private class ButtonHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ int linha= 0; JButton selecionado= (JButton) e.getSource(); for(int i = 0; i &lt; 40; i++){ if(botoes[i] == selecionado){ linha = i; } } String s = botoes[linha].getText(); System.out.print(s);//ou uma Joption pane no lugar } }
algp + ou - assim. :wink:

Você também pode registrar um listener diferente por botão. Aí não tem dúvida sobre qual você clicou.

Crie um botão personalizado extendendo da classe JButton.

Ai vce poderá colocar um atributo dentro de cada botao que criar