Pegar valore de um JTextField adicionado dinâmicamente
3 respostas
A
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?
publicvoidadicionaFP(){JPaneljPessoa=newJPanel();JLabellNome=newJLabel("Nome:");JTextFieldtNome=newJTextField(20);JLabellRG=newJLabel("RG:");JTextFieldtRg=newJTextField(10);JLabellCpf=newJLabel("CPF:");JTextFieldtCpf=newJTextField(10);JButtonbtAdicionar=newJButton("Adicionar");ActionListenertratadorEvento=newActionListener(){publicvoidactionPerformed(ActionEventevent){if(event.getSource()instanceofJButton){// 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(newjava.awt.GridLayout(10,1));jPessoa.setBounds(100,30,400,300);jPanelCentro.setLayout(newFlowLayout());jPanelCentro.add(jPessoa);jPanelCentro.revalidate();}
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?
publicvoidadicionaFP(){JPaneljPessoa=newJPanel();JLabellNome=newJLabel("Nome:");JTextFieldtNome=newJTextField(20);JLabellRG=newJLabel("RG:");JTextFieldtRg=newJTextField(10);JLabellCpf=newJLabel("CPF:");JTextFieldtCpf=newJTextField(10);JButtonbtAdicionar=newJButton("Adicionar");ActionListenertratadorEvento=newActionListener(){publicvoidactionPerformed(ActionEventevent){if(event.getSource()instanceofJButton){// 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(newjava.awt.GridLayout(10,1));jPessoa.setBounds(100,30,400,300);jPanelCentro.setLayout(newFlowLayout());jPanelCentro.add(jPessoa);jPanelCentro.revalidate();}
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.
J
julianolandim
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 */packageguj;importjava.util.ArrayList;importjava.util.List;importjavax.swing.JOptionPane;importjavax.swing.JTextField;publicclassJTextFieldDinamicoextendsjavax.swing.JDialog{List<JTextField>tCpfs=newArrayList<JTextField>();publicJTextFieldDinamico(java.awt.Frameparent,booleanmodal){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(inti=0;i<=10;i++){tCpfs.add(newJTextField());tCpfs.get(i).setBounds(0,i*30,100,20);this.add(tCpfs.get(i));}//botaojButton1.setText("pega valores dos JTextField");jButton1.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){//pega todos os Text de todos os JTextFiedlStringtxt="";for(JTextFieldtCpf:tCpfs){txt+=tCpf.getText()+"\n";}//mostra os valores no JOptionPaneJOptionPane.showMessageDialog(null,txt);}});}@SuppressWarnings("unchecked")privatevoidinitComponents(){jButton1=newjavax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);jButton1.setText("pega valores dos JTextField");org.jdesktop.layout.GroupLayoutlayout=neworg.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();}publicstaticvoidmain(Stringargs[]){java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){JTextFieldDinamicodialog=newJTextFieldDinamico(newjavax.swing.JFrame(),true);dialog.addWindowListener(newjava.awt.event.WindowAdapter(){@OverridepublicvoidwindowClosing(java.awt.event.WindowEvente){System.exit(0);}});dialog.setVisible(true);}});}privatejavax.swing.JButtonjButton1;}
T+
J
julianolandim
Teste o exemplo que fiz acima.
Agora um resumo de como fazer os JTextField com ArrayList
//no escopo da classe crie o objetoList<JTextField>tCpfs=newArrayList<JTextField>();intindice=0;//metodo que cria o JTextFiedlpublicvoidcriaJTextFiedl(){tCpfs.add(newJTextField());tCpfs.get(indice).setBounds(0,indice*30,100,20);this.add(tCpfs.get(indice));indice++;}//evento do botao pegando os JTextFiedljButton1.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){//pega todos os Text de todos os JTextFiedl Stringtxt="";for(JTextFieldtCpf: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=newJTextFiedl[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.