import java.awt.*; import java.awt.event.*; import java.applet.*; import java.util.Hashtable; public class Phone extends Applet { Button lookup; TextField entryField; Choice bookChoice; Hashtable phonebook = new Hashtable(); Hashtable reversePhonebook = new Hashtable(); final class LookupHandler implements ActionListener { public void actionPerformed(ActionEvent e) { Object o = reversePhonebook.get(entryField.getText()); if (o == null) { getToolkit().beep(); } else { bookChoice.select(o.toString()); } } } final class PhoneInputHandler extends KeyAdapter { public void keyTyped(KeyEvent e) { char c = e.getKeyChar(); if ((c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE) || (c == KeyEvent.VK_ENTER) || (c == KeyEvent.VK_TAB)) return; if (!Character.isDigit(c) && (c != '-')) e.consume(); } } final class ChoiceHandler implements ItemListener { public void itemStateChanged(ItemEvent e) { Object o = phonebook.get(e.getItem()); if (o == null) { getToolkit().beep(); entryField.setText(""); } else { entryField.setText(o.toString()); } } } public void init() { ActionListener al = new LookupHandler(); setLayout(new BorderLayout(10, 10)); Panel p = new Panel(new GridLayout(0, 1)); p.add(new Label("Enter number to lookup name", Label.CENTER)); p.add(new Label("Or pick name to show number", Label.CENTER)); entryField = new TextField(10); entryField.addActionListener(al); entryField.addKeyListener(new PhoneInputHandler()); p.add(entryField); add(p, BorderLayout.CENTER); bookChoice = new Choice(); bookChoice.addItemListener(new ChoiceHandler()); initializePhoneBook(bookChoice); add(bookChoice, BorderLayout.NORTH); lookup = new Button("Lookup"); lookup.addActionListener(al); add(lookup, BorderLayout.SOUTH); } private void initializePhoneBook(Choice list) { String s[][] = {{"Mom", "555-1111"}, {"Dad", "555-2222"}, {"Hon", "555-3333"}, {"Boss", "555-4444"}, {"Broker", "555-5555"}, {"Jenny", "867-5309"}}; for (int i = 0; i < s.length; i++) { list.add(s[i][0]); phonebook.put(s[i][0], s[i][1]); reversePhonebook.put(s[i][1], s[i][0]); } } }