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.
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;
}
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.