java - 将多个 JTextField 项添加到 ArrayList

标签 java user-interface arraylist

我有一个新问题,希望得到一些指导。

我正在创建一个 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/

相关文章:

java - 是否有生成 DSL 解析器的工具不需要生成的解析器运行时?

c++ - 如何设置 QComboBox 宽度以适合最大项目?

java - 如何将一个数组列表深度复制到另一个数组列表中

java - 启用 Websphere 安全性后 Arquillian 测试停止工作

java - 反序列化后如何返回正确的对象类型?

JDialog 关闭后 Java JComponent 不重新绘制

java - 可以用 ArrayList 来存储 WebElements 吗?

java - 如何修复列表中对象数组的不兼容类型

java - 如何使用字节的剩余位来存储值?

android - 如何通过警报对话框指示成功?