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

问题描述:

我试图创建一个模仿组织者/调度程序的GUI,但是当我为用户输入他们的任务时插入更多字段时遇到问题。在我的代码中,我有一个指定的按钮来添加更多的字段,另一个来提交它们,但如果用户选择添加更多的字段,我只能访问当前的字段,但他们进入提交时不能访问以前的字段。我如何访问以前的字段?创建新JTextFields时如何访问和存储输入

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(); 
    } 
} 
+0

我建议将它们全部添加到列表中,然后您可以循环访问新的字段列表。 – ThePerson 2013-04-28 17:43:09

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

您需要存储组的JTextFields添加到每个时间addFieldJButton被点击的ArrayListJPanel。提交时可以检索相同的内容。下面是你应该是什么样子的代码粗糙演示:

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(); 
    } 
} 

然后你Organizer类中,如下所示您应该创建一个ArrayList对象:

 ArrayList<FieldsGroup> groups = new ArrayList<FieldsGroup>();//Create an ArrayList 

更改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); 
     groups.add(new FieldsGroup(dateText,taskText,priorityText));//add each group of JTextFields to ArrayList object groups. 
    } 

最后更改submit按钮actionPerformed如下ws:

 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("-----------------------------"); 
      } 
     }