import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import javax.swing.border.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; public class PhoneBook extends JFrame { JTextField firstField = new JTextField(10); JTextField lastField = new JTextField(10); JTextField phoneField = new JTextField(10); JTextField emailField = new JTextField(10); JButton newButton = new JButton("New"); JButton delButton = new JButton("Delete"); JButton sortButton = new JButton("Sort"); DefaultListModel listData = new DefaultListModel(); JList list = new JList(listData); class AddHandler implements ActionListener { public void actionPerformed(ActionEvent e) { String first = firstField.getText(); String last = lastField.getText(); String phone = phoneField.getText(); String email = emailField.getText(); if ( !( first.equals("") && last.equals(""))) { PhoneEntry entry = new PhoneEntry(first, last, phone, email); listData.addElement(entry); firstField.setText(""); lastField.setText(""); // list.setSelectedIndex(listData.getSize()-1); } } } class DelHandler implements ActionListener { public void actionPerformed(ActionEvent e) { int index = list.getSelectedIndex(); if (index >= 0) { listData.remove(index); // list.setSelectedIndex(index); } } } class ListHandler implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { if (!e.getValueIsAdjusting()) { int selected = list.getSelectedIndex(); if (selected >= 0) { PhoneEntry entry = (PhoneEntry)listData.get(selected); firstField.setText(entry.getFirst()); lastField.setText(entry.getLast()); phoneField.setText(entry.getPhone()); emailField.setText(entry.getEmail()); } } } } class SortHandler implements ActionListener { public void actionPerformed(ActionEvent e) { PhoneEntry[] A = new PhoneEntry[listData.getSize()]; // copy list into array for (int i = 0; i < A.length; i++) { A[i] = (PhoneEntry)listData.get(i); } // clear the list listData.removeAllElements(); // sort array selectionSort(A); //copy array into list for (int i = 0; i < A.length; i++) { listData.addElement(A[i]); } } } public PhoneBook() { super("My PhoneBook"); JPanel dataLabels = new JPanel(new GridLayout(4,1)); dataLabels.add(new JLabel("First name: ")); dataLabels.add(new JLabel("Last name: ")); dataLabels.add(new JLabel("Phone number: ")); dataLabels.add(new JLabel("Email address: ")); JPanel dataFields = new JPanel(new GridLayout(4,1)); dataFields.add(firstField); dataFields.add(lastField); dataFields.add(phoneField); dataFields.add(emailField); JPanel data = new JPanel(new BorderLayout()); data.add("West", dataLabels); data.add("Center", dataFields); JPanel buttons = new JPanel(new FlowLayout()); buttons.add(newButton); buttons.add(delButton); buttons.add(sortButton); JScrollPane listScroller = new JScrollPane(list); getContentPane().setLayout(new BorderLayout()); getContentPane().add("North", data); getContentPane().add("Center", listScroller); getContentPane().add("South", buttons); data.setBorder(new TitledBorder(new EtchedBorder(), "Address")); listScroller.setBorder(new TitledBorder(new EtchedBorder(), "Address List")); AddHandler addHandler = new AddHandler(); newButton.addActionListener(addHandler); firstField.addActionListener(addHandler); lastField.addActionListener(addHandler); phoneField.addActionListener(addHandler); emailField.addActionListener(addHandler); delButton.addActionListener(new DelHandler()); sortButton.addActionListener(new SortHandler()); list.addListSelectionListener(new ListHandler()); pack(); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } private void selectionSort(PhoneEntry[] X) { for (int i = 0; i < X.length; i++) { int smallest = getMinIndex(X, i); swap(X, i, smallest); } } private static int getMinIndex(PhoneEntry[] X, int startHere) { int smallest = startHere; for (int i = startHere; i < X.length; i++) { if (X[i].compareToIgnoreCase(X[smallest]) < 0) smallest = i; } return smallest; } private static void swap(PhoneEntry[] X, int pos1, int pos2) { PhoneEntry tmp = X[pos1]; X[pos1] = X[pos2]; X[pos2] = tmp; } public static void main(String args[]) { PhoneBook pb = new PhoneBook(); } }