Pegar valore de um JTextField adicionado dinâmicamente

Eu estou tentando adicionar um evento à um JButton que pega os valores de JTextField adicionados dinâmicamente, devido a minha falta de experiencia em programação java não estou conseguindo fazer isso de maneira correta. Alguem poderia me dar uma dica?


 public void adicionaFP(){

        JPanel jPessoa        = new JPanel();

        JLabel      lNome      = new JLabel("Nome:");
        JTextField  tNome     = new JTextField(20);
        JLabel      lRG          = new JLabel("RG:");
        JTextField  tRg          = new JTextField(10);
        JLabel      lCpf         = new JLabel("CPF:");
        JTextField  tCpf         = new JTextField(10);
        JButton     btAdicionar  = new JButton("Adicionar");


        ActionListener tratadorEvento = new ActionListener() {

        public void actionPerformed(ActionEvent event) {
             if(event.getSource() instanceof JButton){
                // Aqui eu quero por um método que pegue todos os valores das JTextFields inseridos acima.
               // como faço?
                
             }
            }
        };


        btAdicionar.addActionListener(tratadorEvento);

        jPessoa.add(lNome);
        jPessoa.add(tNome);
        jPessoa.add(lRG);
        jPessoa.add(tRg);
        jPessoa.add(lCpf);
        jPessoa.add(tCpf);
        jPessoa.add(btAdicionar);

        jPessoa.setLayout(new java.awt.GridLayout(10, 1));
        jPessoa.setBounds(100, 30, 400, 300);
        jPanelCentro.setLayout(new FlowLayout());
        jPanelCentro.add(jPessoa);

        jPanelCentro.revalidate();

    }

[quote=Algebra]Eu estou tentando adicionar um evento à um JButton que pega os valores de JTextField adicionados dinâmicamente, devido a minha falta de experiencia em programação java não estou conseguindo fazer isso de maneira correta. Alguem poderia me dar uma dica?


 public void adicionaFP(){

        JPanel jPessoa        = new JPanel();

        JLabel      lNome      = new JLabel("Nome:");
        JTextField  tNome     = new JTextField(20);
        JLabel      lRG          = new JLabel("RG:");
        JTextField  tRg          = new JTextField(10);
        JLabel      lCpf         = new JLabel("CPF:");
        JTextField  tCpf         = new JTextField(10);
        JButton     btAdicionar  = new JButton("Adicionar");


        ActionListener tratadorEvento = new ActionListener() {

        public void actionPerformed(ActionEvent event) {
             if(event.getSource() instanceof JButton){
                // Aqui eu quero por um método que pegue todos os valores das JTextFields inseridos acima.
               // como faço?
                
             }
            }
        };


        btAdicionar.addActionListener(tratadorEvento);

        jPessoa.add(lNome);
        jPessoa.add(tNome);
        jPessoa.add(lRG);
        jPessoa.add(tRg);
        jPessoa.add(lCpf);
        jPessoa.add(tCpf);
        jPessoa.add(btAdicionar);

        jPessoa.setLayout(new java.awt.GridLayout(10, 1));
        jPessoa.setBounds(100, 30, 400, 300);
        jPanelCentro.setLayout(new FlowLayout());
        jPanelCentro.add(jPessoa);

        jPanelCentro.revalidate();

    }

[/quote]

Como assim adicionados dinamicamente ??? Se for o caso, vc pode usar o setName() do componente e depois usar o getName() para ter suas propriedades. Não entendi bem o que precisa, mas é um caminho.

t+ e boa sorte.

isso não é dificil de fazer, voce pode criar um ArrayList de seus JTextField, isso se eu entendi bem o que vc quer.
Fiz um pequeno exemplo para voce ententer como funciona, de uma olhada para ver se voce entente.

/**
 *
 * @author Juliano Landim
 * @date 19/02/2012
 */

package guj;

import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JTextField;


public class JTextFieldDinamico extends javax.swing.JDialog {

    List<JTextField> tCpfs = new ArrayList<JTextField>();
    
    public JTextFieldDinamico(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        this.setSize(500,500);
        
        //cria os JTextFiedl , aqui eu criei 10, mas isso nao importa, seria a quantidade que voce precisa.
        for(int i =0;i<=10;i++){
            tCpfs.add(new JTextField());
            tCpfs.get(i).setBounds(0,i*30,100,20);
            this.add(tCpfs.get(i));
        }
        
        //botao
        jButton1.setText("pega valores dos JTextField");
        jButton1.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                //pega todos os Text de todos os JTextFiedl
                String txt = "";
                for(JTextField tCpf :tCpfs){
                   txt+= tCpf.getText()+"\n";
                }
                //mostra os valores no JOptionPane
                JOptionPane.showMessageDialog(null, txt);
                
            }
        });
        
        
       
    }


    @SuppressWarnings("unchecked")
    
    private void initComponents() {

        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jButton1.setText("pega valores dos JTextField");

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .addContainerGap(244, Short.MAX_VALUE)
                .add(jButton1)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(21, 21, 21)
                .add(jButton1)
                .addContainerGap(189, Short.MAX_VALUE))
        );

        pack();
    }

    public static void main(String args[]) {

       
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                JTextFieldDinamico dialog = new JTextFieldDinamico(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    @Override
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

     
         private javax.swing.JButton jButton1;
 

}

T+

Teste o exemplo que fiz acima.
Agora um resumo de como fazer os JTextField com ArrayList

//no escopo da classe crie o objeto
List<JTextField> tCpfs = new ArrayList<JTextField>(); 
int indice = 0;

//metodo que cria o JTextFiedl
public void criaJTextFiedl(){
    tCpfs.add(new JTextField());  
    tCpfs.get(indice).setBounds(0,indice*30,100,20);  
    this.add(tCpfs.get(indice)); 
    
    indice++;
}

//evento do botao pegando os JTextFiedl
        jButton1.addActionListener(new java.awt.event.ActionListener() {  
  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                //pega todos os Text de todos os JTextFiedl  
                String txt = "";  
                for(JTextField tCpf :tCpfs){  
                   txt+= tCpf.getText()+"\n";  
                }  
                //mostra os valores no JOptionPane  
                JOptionPane.showMessageDialog(null, txt);  
                  
            }  
        }); 

existem varias formas de fazer isso, vc pode por exemplo fazer com Array de campos:

JTextFiedl[] cpf = new JTextFiedl[5]

mas a diferença entre fazer com o ArrayList e com o Array é que com o Array vc tem que informar o tamanho do Array enquando com o ArrayList não precisa, no caso no exemplo acima eu criei um Array de JTextFiedl com 5 elementos.