まず、JTextField
本質的にリストであるものに a を使用するのは非現実的です。代わりにすべきことはJList<String>
、電子メールを表す各項目を持つ を用意し、 を介してリストを変更するボタンを追加/削除することDefaultListModel<String>
です。その後、すべての要素 (電子メール アドレス) を取得するには、.elements()
メソッドを呼び出してそれらをトラバースします。
したがって、次のようになります。
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class EmailList extends JPanel implements ActionListener{
private final JList<String> list;
private final DefaultListModel<String> model;
private final JScrollPane scroll;
private final JButton addButton;
private final JButton removeButton;
private final JPanel buttonPanel;
public EmailList(){
super(new BorderLayout());
addButton = new JButton("Add");
addButton.addActionListener(this);
removeButton = new JButton("Remove");
removeButton.addActionListener(this);
buttonPanel = new JPanel(new GridLayout(1, 2, 5, 0));
buttonPanel.add(addButton);
buttonPanel.add(removeButton);
model = new DefaultListModel<>();
list = new JList<>();
list.setModel(model);
scroll = new JScrollPane(list);
add(buttonPanel, BorderLayout.NORTH);
add(scroll, BorderLayout.CENTER);
}
private boolean valid(final String email){
//see if email is valid in here
return true;
}
public List<String> emails(){
final List<String> emails = new LinkedList<>();
final Enumeration<String> elements = model.elements();
while(elements.hasMoreElements())
emails.add(elements.nextElement());
return emails;
}
public void actionPerformed(final ActionEvent e){
final Object source = e.getSource();
if(source.equals(addButton)){
final String input = JOptionPane.showInputDialog(null, "Enter an email address");
if(input == null || input.trim().isEmpty())
return;
final String email = input.trim();
if(!valid(email)){
JOptionPane.showMessageDialog(null, "That email is not valid");
return;
}
model.addElement(email);
list.repaint();
}else if(source.equals(removeButton)){
final int i = list.getSelectedIndex();
if(i < 0)
return;
model.removeElementAt(i);
list.repaint();
}
}
}
ちょっとしたメモですが、私はこれをJava 8で書いたので、いくつかの小さな変更を加える必要があるかもしれません(変更のみがString
空の<>