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?
publicclassFormularioDinamicoextendsJFrame{publicstaticvoidmain(String[]args){FormularioDinamicoformularioDinamico=newFormularioDinamico();formularioDinamico.exibirFormulario();}publicFormularioDinamico(){try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLayout(newFlowLayout(FlowLayout.LEFT));setTitle("Formulário dinâmico!");setResizable(false);for(intI=0;I<10;++I){JButtonbuttonToFillBackground=newJButton("Botão "+(I+1));buttonToFillBackground.addActionListener(newBotaoDinamicoActionListener(this));add(buttonToFillBackground);}}catch(ExceptiongeneralException){generalException.printStackTrace();}}publicvoidexibirFormulario(){pack();setLocationRelativeTo(null);setVisible(true);}privateclassBotaoDinamicoActionListenerimplementsActionListener{privateJFrameformularioPai;publicBotaoDinamicoActionListener(JFrameformularioPai){this.formularioPai=formularioPai;}publicvoidactionPerformed(ActionEvente){JButtonclickedButton=(JButton)e.getSource();clickedButton.setForeground(Color.RED);clickedButton.setText("Mudou o texto!");formularioPai.pack();}}}
Como posso implementar a parte do evento que eu falei ?
Obrigado
privateJButton[]caixas=newJButton[5];for(inti=0,a=15;i<=4;i++,a+=45){caixas[i]=newJButton();caixas[i].setBounds(a,30,30,30);caixas[i].addActionListener(newActionListener(this){privateJFrameformularioPai;publicBotaoDinamicoActionListener(JFrameformularioPai){this.formularioPai=formularioPai;}publicvoidactionPerformed(ActionEvente){JButtonclickedButton=(JButton)e.getSource();clickedButton.setForeground(Color.RED);clickedButton.setText("Mudou o texto!");formularioPai.pack();}});getContentPane().add(caixas[i]);}