// C Sc 227: Use this GUI to see your Rolodex in action. // // Programmer: Rick Mercer // import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; public class RolodexGUI extends JFrame { private static final long serialVersionUID = 1L; public static void main(String[] args) { RolodexGUI window = new RolodexGUI(); window.setVisible(true); } private Rolodex entries; private DefaultListModel names; // Stores the collection in that can be selected private JList nameList; // Stores the collection in that can be selected // Graphical Components needed in the inner classes private JTextField lastNameSearchField = new JTextField(9); private JTextField entryField = new JTextField(20); public RolodexGUI() { initializeModel(); layOut(); registerListeners(); } private void initializeModel() { entries = new Rolodex(); entries.addInOrder(new Entry("Li, Ni", "520.555.0001")); entries.addInOrder(new Entry("Band, Kim", "620.555.0002")); entries.addInOrder(new Entry("Gupta, Sandeep", "520.555.0003")); entries.addInOrder(new Entry("Harrison, Devon", "981.555.0004")); entries.addInOrder(new Entry("Zee, Kim", "456.555.1234")); entries.addInOrder(new Entry("Zee, Regan", "789.555.5467")); entries.addInOrder(new Entry("Zee, Channing", "01.011.555.8899")); entries.addInOrder(new Entry("Bee, Loren", "520.555.0006")); entries.addInOrder(new Entry("Tee, Regan", "768.555.0007")); entries.addInOrder(new Entry("Dee, Ty", "752.555.0008")); entries.addInOrder(new Entry("Vee, Chris", "125.555.0009")); entries.addInOrder(new Entry("Xu, Li", "520.555.0010")); entries.addInOrder(new Entry("Ee, Pat", "658.555.0011")); entries.addInOrder(new Entry("Gee, Kerry", "219.555.0012")); entries.addInOrder(new Entry("Jay, Sam", "520.555.0013")); entries.addInOrder(new Entry("Kay, Joe", "520.555.0014")); entries.addInOrder(new Entry("El, Bernie", "520.555.0015")); entries.addInOrder(new Entry("Mmm, Frances", "520.555.0016")); entries.addInOrder(new Entry("Oo, Ali", "520.555.0017")); entries.addInOrder(new Entry("Pea, Angel", "756.555.0018")); entries.addInOrder(new Entry("Ar, Britt", "555.0019")); entries.addInOrder(new Entry("Queue, Brook", "520.555.0020")); entries.addInOrder(new Entry("Dubya, Casey", "520.555.0021")); entries.addInOrder(new Entry("Q, Oh7", "520.555.4321")); names = new DefaultListModel(); for (int j = 0; j < entries.size(); j++) { names.addElement(entries.get(j).getName()); } nameList = new JList(names); } private void layOut() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Rolodex"); setSize(280, 300); setLocation(100, 100); Container cp = this.getContentPane(); JPanel all = new JPanel(); entryField.setEditable(false); entryField.setFont(new Font("Sans Serif", Font.BOLD, 13)); entryField.setPreferredSize(new Dimension(140, 26)); entryField.setForeground(Color.BLUE); all.add(entryField); nameList.setSelectedIndex(0); setEntryField(0); // Show names and phone number of first in list JScrollPane sb = new JScrollPane(nameList); sb.setPreferredSize(new Dimension(240, 180)); all.add(sb); all.add(new JLabel("Search by Last Name")); all.add(lastNameSearchField); cp.add(all); } private void registerListeners() { lastNameSearchField.getDocument().addDocumentListener(new NameSearchListener()); nameList.addListSelectionListener(new ListClickedListener()); } private class NameSearchListener implements DocumentListener { public void changedUpdate(DocumentEvent arg0) { } public void removeUpdate(DocumentEvent arg0) { doSearch(); } public void insertUpdate(DocumentEvent arg0) { doSearch(); } public void doSearch() { entryField.setText(""); String currText = lastNameSearchField.getText().toLowerCase(); int index = 0; for (; index < names.size(); index++) { if (currText.compareTo(((String) names.get(index)).toLowerCase()) <= 0) break; } int currentSelection = nameList.getSelectedIndex(); setEntryField(currentSelection); nameList.setSelectedIndex(index); nameList.ensureIndexIsVisible(index); } } private class ListClickedListener implements ListSelectionListener { public void valueChanged(ListSelectionEvent arg0) { entryField.setText(entries.get(nameList.getSelectedIndex()) .getPhoneNumber()); int currentSelection = nameList.getSelectedIndex(); setEntryField(currentSelection); } } private void setEntryField(int currentSelection) { Entry currentEntry = entries.get(currentSelection); String name = currentEntry.getName(); int space = name.indexOf(" ", -1); name = name.substring(space + 1) + " " + name.substring(0, space - 1); entryField.setText(name + ": " + currentEntry.getPhoneNumber()); } }