如何从Java中动态生成的文本字段中获取数据?

时间:2015-04-19 13:05:11

标签: java dynamic arraylist runtime textfield

我使用for循环生成了N个文本字段(N是用户输入的输入数)。我希望用户在这些文本字段中输入数据并将其保存在ArrayList中。我不知道那些字段的名称,所以有没有办法获取文本字段名称?或者如何将来自N个文本字段的数据存储到ArrayList并使用该ArrayList中的值。这是我的代码:

public class FCFS extends JFrame implements ActionListener{
    JButton btn1,btn2,b;
    JTextField tf1,tf2;
    JPanel p;
    Container c;
    ArrayList arr=new ArrayList();
    public FCFS(){
        //super("FCFS");
        c=getContentPane();
        p=new JPanel();
        JLabel lbl1=new JLabel("Enter number of processes:");
        p.add(lbl1);
        tf1=new JTextField(20);
        p.add(tf1);
        btn1=new JButton("Enter");
        btn1.addActionListener(this);
        p.add(btn1);
        c.add(p);

    }
    public static void main(String args[]){
        FCFS obj=new FCFS();
        obj.setVisible(true);
        obj.setSize(300,500);
        obj.setDefaultCloseOperation(3);

    }
    @Override
    public void actionPerformed(ActionEvent ae){
        if(ae.getSource()==btn1){
            p.removeAll();
            int a=Integer.parseInt(tf1.getText());
            for(int i=1;i<=a;i++){
                p.add(new JLabel("Enter Burst for Process "+i+":"));
                tf2=new JTextField(20);
                p.add(tf2);
                arr.add(tf2.getText());
                c.add(p);
                revalidate();
                repaint();
            }
            b=new JButton("Show");
            p.add(b);
            c.add(p);
            revalidate();
            repaint();
            b.addActionListener(this);
        }
        else if(ae. getSource()==b){
            System.out.println("Hello");
            System.out.println(arr);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您不需要字段的名称,您需要字段本身。您可以迭代Panel,找到所有文本字段,或者将它们保存在数组中,然后在您想要使用它们时提取它们的值:

@Override
public void actionPerformed(ActionEvent ae){
    if(ae.getSource()==btn1){
        p.removeAll();
        int a=Integer.parseInt(tf1.getText());
        for(int i=1;i<=a;i++){
            p.add(new JLabel("Enter Burst for Process "+i+":"));
            tf2=new JTextField(20);
            p.add(tf2);
            arr.add(tf2);
        }
        b=new JButton("Show");
        p.add(b);
        c.add(p);
        revalidate();
        repaint();
        b.addActionListener(this);
    }
    else if(ae.getSource()==b){
        System.out.println("Hello");
        ArrayList texts=new ArrayList();
        for (Object textField : arr) {
            texts.add(((JTextField)textField).getText();
        }
        System.out.println(texts);
    }
}