创建新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();
}
}
答
我建议提取一个包含dateText,taskText,priorityText的新面板类,并为您添加的面板保留一个List。
答
您需要存储组的JTextFields
添加到每个时间addField
JButton
被点击的ArrayList
JPanel
。提交时可以检索相同的内容。下面是你应该是什么样子的代码粗糙演示:
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("-----------------------------");
}
}
我建议将它们全部添加到列表中,然后您可以循环访问新的字段列表。 – ThePerson 2013-04-28 17:43:09