如何从通过JLabel单击动态创建的java中获取JTextField的值

时间:2014-03-05 12:55:52

标签: java jtextfield

每次点击标签时我都会创建一个JTextField。我的问题是将文本放在那些创建的文本字段中。

这是我的代码:

public void mouseClicked(MouseEvent arg0) {    
    List<JTextField> mine = new ArrayList<JTextField>();
    box = new JTextField();
    name = new JTextField();
    pnlPanel.add(box);
    pnlpanel.add(name);
    lay++;
    if (lay > 0) {
        box.setBounds(283, 145, 182, 27);
        name.setBounds(81, 145, 182, 27);
        mine.add(box);
    }
    GetData mydata = new GetData();
    mydata.doGetData();
    frame.repaint();
}

这是我获取用户输入数据的代码,但它不起作用:

public class GetData {
    public void doGetData(List<JTextField> myFields) {
        for (JTextField txt: myFields) {
        }
    }
}

如何获得用户输入?

2 个答案:

答案 0 :(得分:0)

要获取JTextField的文本,请使用textfield.getText()
您可以将JTextFields保存到列表List<JTextField>
或遍历面板组件panel.getComponents()
你可以给每个JTextField一个像textfield.setName("id");这样的id。

答案 1 :(得分:0)

您必须以某种方式存储字段。我更喜欢使用ArrayList,但是(正如Klemens Morbe所提到的)有很多种方法。

这是一个基本示例,输出将出现在控制台中。

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Collection;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;


public class MoreAndMoreTextfields extends JFrame {

    // the panel, that we will add the visible fields to
    private JPanel panel = new JPanel();

    // a collection of all fields, so that we can access them afterwards
    private Collection<JTextField> textFields = new ArrayList<JTextField>();

    public MoreAndMoreTextfields() {

        // basic window layout stuff
        setSize(400, 300);
        setLayout(new FlowLayout());
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        setContentPane(panel);

        // add label, that will create new input fields
        JLabel addInputLabel = new JLabel("click for more fields");
        addInputLabel.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                JTextField textField = new JTextField();
                panel.add(textField);
                textField.setPreferredSize(new Dimension(100,20));
                textFields.add(textField);
                revalidate();
            }
        });
        panel.add(addInputLabel);

        // add new label, that will print out contents
        JLabel outputLabel = new JLabel("click for contents");
        outputLabel.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("Contents of fields:");
                for (JTextField textField : textFields) {
                    System.out.println("  input:"+textField.getText());
                }
            }
        });
        panel.add(outputLabel);
    }


    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new MoreAndMoreTextfields().setVisible(true);
            }
        });
    }
}