我有一个新问题,希望得到一些指导。
我正在创建一个 GUI 程序,它从用户那里获取联系人信息,每次单击 addButton 时都会创建一个联系人对象并将其添加到数组列表中,然后当单击 viewButton 时会显示所有信息。
我终于将 JTextField 信息放入 ArrayList 中,但是,我不确定如何添加多个联系信息。我添加了 firstNameInput.setText("");在输入第一个联系信息以清除屏幕之后,这也会清除 ArrayList。我在想我需要某种循环,但我创建的循环最终创建了一个无限循环。这一切都在 ActionPerformed 方法中......我明白为什么它是一个无限循环,但这是我第一次使用 ArrayList,所以我感到困惑。
非常感谢指向正确方向的指针。
public class InputForm extends JFrame {
private JPanel panel;
private JLabel firstNameLabel;
private JLabel lastNameLabel;
private JLabel phoneNumLabel;
private JLabel emailLabel;
private JTextField firstNameInput;
private JTextField lastNameInput;
private JTextField phoneInput;
private JTextField emailInput;
private JButton addButton;
private JButton viewButton;
private String fn;
private String ln;
private String ph;
private String em;
private List<Contact> list = new ArrayList<Contact>();
public InputForm() {
int windowWidth = 650;
int windowHeight = 550;
//Window title
setTitle("CONTACT FORM");
//Set window size.
setSize(windowWidth, windowHeight);
//Exit on close
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Buld the panel and add it the the JFrame.
buildPanel();
//Add the panel to the frames content pane
add(panel);
//Display the window.
setVisible(true);
}
private void buildPanel() {
panel = new JPanel();
addButton = new JButton("Add Contact");
viewButton = new JButton("View Contacts");
firstNameLabel = new JLabel("First Name");
firstNameInput = new JTextField(10);
lastNameLabel = new JLabel("Last Name: ");
lastNameInput = new JTextField(10);
phoneNumLabel = new JLabel("Phone Number: ");
phoneInput = new JTextField(10);
emailLabel = new JLabel("Email: ");
emailInput = new JTextField(10);
/*Add labels, text fields and buttons to the panel*/
panel.add(firstNameLabel);
panel.add(firstNameInput);
panel.add(lastNameLabel);
panel.add(lastNameInput);
panel.add(phoneNumLabel);
panel.add(phoneInput);
panel.add(emailLabel);
panel.add(emailInput);
panel.add(addButton);
panel.add(viewButton);
theHandler handler = new theHandler();
addButton.addActionListener(handler);
viewButton.addActionListener(handler);
}
private class theHandler implements ActionListener {
public void actionPerformed(ActionEvent event) {
fn = firstNameInput.getText();
ln = lastNameInput.getText();
ph = phoneInput.getText();
em = emailInput.getText();
Contact con = new Contact(fn, ln, ph, em);
while(event.getSource() == addButton) {
list.add(con);
fn = firstNameInput.getText();
ln = lastNameInput.getText();
ph = phoneInput.getText();
em = emailInput.getText();
list.add(con);
firstNameInput.setText("");
lastNameInput.setText("");
phoneInput.setText("");
emailInput.setText("");
}
if(event.getSource() == viewButton) {
JOptionPane.showMessageDialog(null,"Contact Info:\n" + con);
}
}
}
}
联系类
public class Contact {
private String fn;
private String ln;
private String ph;
private String em;
public Contact(String fn, String ln, String ph, String em) {
this.fn = fn;
this.ln = ln;
this.ph = ph;
this.em = em;
}
public String getFirstName() {
return fn;
}
public void setFirstName(String fn) {
this.fn = fn;
}
public String getLastName() {
return ln;
}
public void setLastName(String ln) {
this.ln = ln;
}
public String getPhone() {
return ph;
}
public void setPhone(String ph) {
this.ph = ph;
}
public String getEmail() {
return em;
}
public void setEmail(String em) {
this.em = em;
}
public String toString() {
return "First Name: " + getFirstName() + "\n" +
"Last Name: " + getLastName() + "\n" +
"Phone Number: " + getPhone() + "\n" +
"Email: " + getEmail() + "\n";
}
public static void main(String[] args) {
new InputForm();
}
}
最佳答案
每次您想要将联系人
添加到您的列表
时,您都需要创建一个新 联系人
。您可以使用 new Contact
来做到这一点。另外,您不需要循环。每次 event
触发时,您都会将 one 添加到 List
。类似的东西,
// Contact con = new Contact(fn, ln, ph, em);
// while(event.getSource() == addButton) {
if (event.getSource() == addButton) {
fn = firstNameInput.getText();
ln = lastNameInput.getText();
ph = phoneInput.getText();
em = emailInput.getText();
Contact con = new Contact(fn, ln, ph, em);
list.add(con); // <-- adds the Contact to the list.
firstNameInput.setText("");
lastNameInput.setText("");
phoneInput.setText("");
emailInput.setText("");
}
关于java - 将多个 JTextField 项添加到 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32675587/