I'm trying to get text from a JTextField iterated through my code (apparently, I can't add a different text field from a button). Here's what the "Add Items" button do:
addButton.addActionListener(new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
tf = new JTextField("Name",20);
tfv = new JTextField("Value", 7);
p.revalidate();
p.repaint();
p.add(tf);
p.add(tfv);
}
});
It adds two new text fields in the panel using FlowLayout. Now, I want to get the text given by the user from text fields with each one assigned to a different variable or maybe into an ArrayList by clickin the "OK" button but the getText() method doesn't seem to work.
okButton.addActionListener( e -> {
String txt = tfv.getText(); //only captures the text from the last field in the panel
});
Can't seem to think of anything right now.
in this code when you are reinitializing tf
and tfv
in addButton
you lost the reference to previous defined textfiels
tf = new JTextField("Name",20);
tfv = new JTextField("Value", 7);
so to solve this problem you need to define an ArrayList to hold reference to all defined textfields and then you can access to all of them:
ArrayList<JTextField> arrayNames = new ArrayList<JTextField>();
ArrayList<JTextField> arrayValues = new ArrayList<JTextField>();
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tf = new JTextField("Name",20);
tfv = new JTextField("Value", 7);
p.revalidate();
p.repaint();
p.add(tf);
p.add(tfv);
arrayNames.add(tf);
arrayValues.add(tfv);
}
});
accessing
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (JTextField txtValue : arrayValues) {
System.out.println(txtValue.getText());
}
}
});