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();
}
}