Cria um action listener, que receba um aluno como parâmetro, e que abra o seu form de detalhes do aluno:
public class AbrirDadosAlunoActionListener {
private Aluno aluno;
public AbrirDadosAlunoActionListener(Aluno aluno) {
this.aluno = aluno;
}
public void actionPerformed(ActionEvent e) {
FormDetalheAluno form = new FormDetalheAluno(aluno);
form.setVisible(true);
}
}
Depois, é só criar os botões:
for (Aluno a : alunos) {
JButton btnDetalhes = new JButton("Detalhes");
btnDetalhes.addActionListener(new AbrirDadosAlunoActionListener(a));
pnlAluno.add(btnDetalhes);
}
Assim vc não precisa ficar criando arrays por aí, ou ficar testando coisas com "evt.getSource()", ou percorrer listas em buscas de índices.
Não se esqueça que os listeners também são objetos, e podem guardar referências.
Todos os botões compartilharem uma única instância de listener, que testa contra getSource() geralmente é uma má idéia. Não só torna o código rebuscado, cheio de ifs, ou operações desnecessárias, como também vai contra o próprio princípio pelo qual listeners existem em primeiro lugar. Pense sempre umas duas ou três vezes antes de fazer isso, pois geralmente usar os listeners de maneira orientada a objetos é uma alternativa melhor.