001: import java.awt.*;
002: import java.awt.event.*;
003: import javax.swing.*;
004: 
005: /**
006:    Presents a phone GUI for the voice mail system.
007: */
008: public class Telephone
009: {
010:    /**
011:       Constructs a telephone with a speaker, keypad,
012:       and microphone.
013:    */
014:    public Telephone()
015:    {
016: 
017:       JPanel speakerPanel = new JPanel();
018:       speakerPanel.setLayout(new BorderLayout());
019:       speakerPanel.add(new JLabel("Speaker:"),
020:          BorderLayout.NORTH);
021:       speakerField = new JTextArea(10, 25);
022:       speakerPanel.add(speakerField,
023:          BorderLayout.CENTER);
024: 
025:       String keyLabels = "123456789*0#";
026:       JPanel keyPanel = new JPanel();
027:       keyPanel.setLayout(new GridLayout(4, 3));
028:       for (int i = 0; i < keyLabels.length(); i++)
029:       {
030:          final String label = keyLabels.substring(i, i + 1);
031:          JButton keyButton = new JButton(label);
032:          keyPanel.add(keyButton);
033:          keyButton.addActionListener(new
034:             ActionListener()
035:             {
036:                public void actionPerformed(ActionEvent event)
037:                {
038:                   connect.dial(label);
039:                }
040:             });
041:       }
042: 
043:       final JTextArea microphoneField = new JTextArea(10, 25);
044: 
045:       JButton speechButton = new JButton("Send speech");
046:       speechButton.addActionListener(new
047:          ActionListener()
048:          {
049:             public void actionPerformed(ActionEvent event)
050:             {
051:                connect.record(microphoneField.getText());
052:                microphoneField.setText("");
053:             }
054:          });
055: 
056:       JButton hangupButton = new JButton("Hangup");
057:       hangupButton.addActionListener(new
058:          ActionListener()
059:          {
060:             public void actionPerformed(ActionEvent event)
061:             {
062:                connect.hangup();
063:             }
064:          });
065: 
066:       JPanel buttonPanel = new JPanel();
067:       buttonPanel.add(speechButton);
068:       buttonPanel.add(hangupButton);
069:       
070:       JPanel microphonePanel = new JPanel();
071:       microphonePanel.setLayout(new BorderLayout());
072:       microphonePanel.add(new JLabel("Microphone:"),
073:          BorderLayout.NORTH);
074:       microphonePanel.add(microphoneField,
075:          BorderLayout.CENTER);
076:       microphonePanel.add(buttonPanel,
077:          BorderLayout.SOUTH);      
078: 
079:       JFrame frame = new JFrame();
080:       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
081:       Container contentPane = frame.getContentPane();
082:       contentPane.add(speakerPanel,
083:          BorderLayout.NORTH);
084:       contentPane.add(keyPanel, 
085:          BorderLayout.CENTER);
086:       contentPane.add(microphonePanel,
087:          BorderLayout.SOUTH);
088:       
089:       frame.pack();
090:       frame.show();
091:    }
092: 
093:    /**
094:       Give instructions to the mail system user.
095:    */
096:    public void speak(String output)
097:    {
098:       speakerField.setText(output);
099:    }
100: 
101:    public void run(Connection c)
102:    {
103:       connect = c;
104:    }
105: 
106:    private JTextArea speakerField;
107:    private Connection connect;
108: }