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 ActionListener listener = new ClearButtonListener();
63
64 clearButton.addActionListener(
65 new ClearButtonListener());
66
67 add(buttonPanel, "Center");
68 }
69
70 /**
71 Adds a button to the button panel.
72 @param label the button label
73 */
74 private void addButton(final String label)
75 {
76 class DigitButtonListener implements ActionListener
77 {
78 public void actionPerformed(ActionEvent event)
79 {
80 // Don't add two decimal points
81 if (label.equals(".")
82 && display.getText().indexOf(".") != -1)
83 {
84 return;
85 }
86
87 // Append label text to button
88 display.setText(display.getText() + label);
89 }
90 }
91
92 JButton button = new JButton(label);
93 buttonPanel.add(button);
94 ActionListener listener = new DigitButtonListener();
95 button.addActionListener(listener);
96 }
97
98 /**
99 Gets the value that the user entered.
100 @return the value in the text field of the keypad
101 */
102 public double getValue()
103 {
104 return Double.parseDouble(display.getText());
105 }
106
107 /**
108 Clears the dislay.
109 */
110 public void clear()
111 {
112 display.setText("");
113 }
114 }
115