1 import java.awt.BorderLayout;
2 import java.awt.GridLayout;
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5 import javax.swing.JButton;
6 import javax.swing.JPanel;
7 import javax.swing.JTextField;
8
9 /**
10 A component that lets the user enter a number, using
11 a button pad labeled with digits.
12 */
13 public class KeyPad extends JPanel
14 {
15 private JPanel buttonPanel;
16 private JButton clearButton;
17 private JTextField display;
18
19 /**
20 Constructs the keypad panel.
21 */
22 public KeyPad()
23 {
24 setLayout(new BorderLayout());
25
26 // Add display field
27
28 display = new JTextField();
29 add(display, "North");
30
31 // Make button panel
32
33 buttonPanel = new JPanel();
34 buttonPanel.setLayout(new GridLayout(4, 3));
35
36 // Add digit buttons
37
38 addButton("7");
39 addButton("8");
40 addButton("9");
41 addButton("4");
42 addButton("5");
43 addButton("6");
44 addButton("1");
45 addButton("2");
46 addButton("3");
47 addButton("0");
48 addButton(".");
49
50 // Add clear entry button
51
52 clearButton = new JButton("CE");
53 buttonPanel.add(clearButton);
54
55 class ClearButtonListener implements ActionListener
56 {
57 public void actionPerformed(ActionEvent event)
58 {
59 display.setText("");
60 }
61 }
62
63 ActionListener listener = new ClearButtonListener();
64
65 clearButton.addActionListener(new
66 ClearButtonListener());
67
68 add(buttonPanel, "Center");
69 }
70
71 /**
72 Adds a button to the button panel
73 @param label the button label
74 */
75 private void addButton(final String label)
76 {
77 class DigitButtonListener implements ActionListener
78 {
79 public void actionPerformed(ActionEvent event)
80 {
81 // Don't add two decimal points
82 if (label.equals(".")
83 && display.getText().indexOf(".") != -1)
84 {
85 return;
86 }
87
88 // Append label text to button
89 display.setText(display.getText() + label);
90 }
91 }
92
93 JButton button = new JButton(label);
94 buttonPanel.add(button);
95 ActionListener listener = new DigitButtonListener();
96 button.addActionListener(listener);
97 }
98
99 /**
100 Gets the value that the user entered.
101 @return the value in the text field of the keypad
102 */
103 public double getValue()
104 {
105 return Double.parseDouble(display.getText());
106 }
107
108 /**
109 Clears the display.
110 */
111 public void clear()
112 {
113 display.setText("");
114 }
115 }
116