Java 创建新JTextFields时如何访问和存储输入

Java 创建新JTextFields时如何访问和存储输入,java,Java,我试图创建一个模拟组织者/调度器的GUI,但当我插入更多字段供用户输入任务时,我遇到了一个问题。在我的代码中,我有一个按钮用于添加更多字段,另一个按钮用于提交这些字段,但是如果用户选择添加更多字段,我只能访问当前字段,而不能在他们输入submit时访问以前的字段。如何访问以前的字段 import javax.swing.JTextField; import java.awt.event.*; import javax.swing.*; import java.awt.*; import java

我试图创建一个模拟组织者/调度器的GUI,但当我插入更多字段供用户输入任务时,我遇到了一个问题。在我的代码中,我有一个按钮用于添加更多字段,另一个按钮用于提交这些字段,但是如果用户选择添加更多字段,我只能访问当前字段,而不能在他们输入submit时访问以前的字段。如何访问以前的字段

import javax.swing.JTextField;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.util.*;  

class Organizer extends JPanel implements ActionListener
{
     protected JTextField dateText,taskText, priorityText;
     Button addField;
     Button submit;
     JPanel panel;
     Vector<String> Dates = new Vector();
     Vector<String> Tasks = new Vector();
     Vector<String> Priority = new Vector();


     public void createWindow()
     {
        JFrame frame = new JFrame ("Organizer");
        panel = new JPanel();
        frame.setVisible(true);
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);

        addField = new Button("(+)");
        addField.addActionListener(this);
        panel.add(addField);

        submit = new Button ("submit");
        submit.addActionListener(this);
        panel.add(submit);

        addFields();
     }

     public void addFields()
     {
        dateText = new JTextField("Enter Date(mon/dd/yyyy)",30);
        taskText = new JTextField("Enter Task",30);
        priorityText = new JTextField("Rate importance(10-high,1-low)",30);

        panel.add(dateText);
        panel.add(taskText);
        panel.add(priorityText);
     }

     public void actionPerformed(ActionEvent evt)
     {
        if(evt.getSource() == addField)
        { 
          addFields();
          panel.revalidate();
          panel.repaint(); 
        }

        if(evt.getSource() == submit)
        {
           String temp = dateText.getText(); 
           System.out.println(temp);

           //Dates.addElement(temp);
           //System.out.println(Dates);
        }
     }

     public static void main (String[] args)
     {
        Organizer Org = new Organizer();
        Org.createWindow();
     }
}
import javax.swing.JTextField;
导入java.awt.event.*;
导入javax.swing.*;
导入java.awt.*;
导入java.util.*;
类管理器扩展了JPanel实现ActionListener
{
受保护的JTextField dateText、taskText、priorityText;
按钮添加字段;
按钮提交;
JPanel小组;
向量日期=新向量();
向量任务=新向量();
向量优先级=新向量();
public void createWindow()
{
JFrame=新的JFrame(“组织者”);
panel=新的JPanel();
frame.setVisible(true);
框架。设置尺寸(500500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。添加(面板);
addField=新按钮(“(+)”);
addField.addActionListener(此);
panel.add(addField);
提交=新按钮(“提交”);
submit.addActionListener(this);
专家组。添加(提交);
addFields();
}
公共void addFields()
{
dateText=新的JTextField(“输入日期(mon/dd/yyyy)”,30);
taskText=新的JTextField(“输入任务”,30);
priorityText=新的JTextField(“比率重要性(10高,1低)”,30);
panel.add(日期文本);
panel.add(任务文本);
面板.添加(优先文本);
}
已执行的公共无效操作(操作事件evt)
{
if(evt.getSource()==addField)
{ 
addFields();
panel.revalidate();
panel.repaint();
}
if(evt.getSource()=提交)
{
String temp=dateText.getText();
系统输出打印项次(温度);
//日期。补遗(临时);
//系统输出打印项次(日期);
}
}
公共静态void main(字符串[]args)
{
组织者组织=新组织者();
Org.createWindow();
}
}

我建议提取一个包含dateText、taskText、priorityText的新面板类,并为添加的面板保留一个列表

每次单击
addField
JButton
ArrayList
时,您需要存储添加到
JPanel
JTextFields
组。在提交时,您可以检索相同的内容。以下是您编写的代码的大致演示:

class FieldsGroup //Represents each group of JTextFields
{
    JTextField dateText;
    JTextField taskText;
    JTextField priorityText;
    public FieldsGroup(JTextField dateText,JTextField taskText,JTextField priorityText)
    {
        this.dateText = dateText;
        this.taskText = taskText;
        this.priorityText = priorityText;
    }
    public String getDateText()
    {
        return dateText.getText();
    }
    public String getTaskText()
    {
        return taskText.getText();
    }
    public String getPriorityText()
    {
        return priorityText.getText();
    }
}
然后在
组织者
类中,您应该创建一个
数组列表
对象,如下所示:

     ArrayList<FieldsGroup> groups = new ArrayList<FieldsGroup>();//Create an ArrayList
        if(evt.getSource() == submit)
        {
            for (FieldsGroup gr : groups)
            {
                System.out.println(gr.getDateText());
                System.out.println(gr.getTaskText());
                System.out.println(gr.getPriorityText());
                System.out.println("-----------------------------");
            }
       }
最后将
submit
按钮
actionPerformed
更改如下:

     ArrayList<FieldsGroup> groups = new ArrayList<FieldsGroup>();//Create an ArrayList
        if(evt.getSource() == submit)
        {
            for (FieldsGroup gr : groups)
            {
                System.out.println(gr.getDateText());
                System.out.println(gr.getTaskText());
                System.out.println(gr.getPriorityText());
                System.out.println("-----------------------------");
            }
       }

我建议将它们全部添加到一个列表中,然后您可以循环浏览新字段列表。