1 package com.jpeterson.virtlcd;
2
3 import java.awt.Color;
4 import java.awt.FlowLayout;
5 import java.awt.GridLayout;
6 import java.awt.event.KeyEvent;
7
8 import javax.swing.JComponent;
9 import javax.swing.JFrame;
10 import javax.swing.JLabel;
11 import javax.swing.JPanel;
12 import javax.swing.JTabbedPane;
13 import javax.swing.JTextArea;
14 import javax.swing.JTextField;
15 import javax.swing.event.DocumentEvent;
16 import javax.swing.event.DocumentListener;
17 import javax.swing.text.BadLocationException;
18 import javax.swing.text.Document;
19
20 import com.jpeterson.virtlcd.swing.JDotMatrixDisplay;
21 import com.jpeterson.virtlcd.swing.JDotMatrixSixByEight;
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 public class TestHarness extends JPanel {
46
47
48
49 private static final long serialVersionUID = 1L;
50
51 private JTextField characterTestTextField;
52
53 private JTextArea displayTestTestArea;
54
55 private JDotMatrixSixByEight characterTestDotMatrixCharacter;
56
57 private JDotMatrixDisplay displayTestDotMatrixDisplay;
58
59 public static void main(String[] args) {
60
61
62 javax.swing.SwingUtilities.invokeLater(new Runnable() {
63 public void run() {
64 createAndShowGUI();
65 }
66 });
67 }
68
69 public TestHarness() {
70 super(new GridLayout(1, 1));
71
72 JTabbedPane tabbedPane = new JTabbedPane();
73
74 JComponent panel1 = makeCharacterTestPanel();
75 tabbedPane.addTab("Character test", null, panel1,
76 "Test individual characters");
77 tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
78
79 JComponent panel2 = makeDisplayTestPanel();
80 tabbedPane.addTab("Display test", null, panel2, "Test display");
81 tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
82
83 JComponent panel3 = makeCharSetPanel();
84 tabbedPane.addTab("Character set", null, panel3,
85 "Display character set");
86 tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);
87
88
89 add(tabbedPane);
90
91
92 tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
93 }
94
95 protected JComponent makeCharacterTestPanel() {
96 JPanel panel = new JPanel(false);
97 JLabel label = new JLabel("Character: ");
98 JLabel displayLabel = new JLabel(" Display: ");
99
100 panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
101
102 characterTestTextField = new JTextField(1);
103 characterTestTextField.getDocument().addDocumentListener(
104 new CharacterDocumentListener());
105
106 characterTestDotMatrixCharacter = new JDotMatrixSixByEight();
107 characterTestDotMatrixCharacter.setBackground(Color.BLACK);
108 characterTestDotMatrixCharacter.setForeground(Color.RED);
109
110 panel.add(label);
111 panel.add(characterTestTextField);
112 panel.add(displayLabel);
113 panel.add(characterTestDotMatrixCharacter);
114
115 return panel;
116 }
117
118 protected JComponent makeDisplayTestPanel() {
119 JPanel panel = new JPanel(false);
120 JLabel label = new JLabel("Message: ");
121 JLabel displayLabel = new JLabel(" Display: ");
122
123 panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
124
125 displayTestTestArea = new JTextArea(4, 20);
126 displayTestTestArea.getDocument().addDocumentListener(
127 new DisplayDocumentListener());
128
129 displayTestDotMatrixDisplay = new JDotMatrixDisplay(20, 4);
130 displayTestDotMatrixDisplay.setBackground(Color.BLACK);
131 displayTestDotMatrixDisplay.setForeground(Color.RED);
132
133 panel.add(label);
134 panel.add(displayTestTestArea);
135 panel.add(displayLabel);
136 panel.add(displayTestDotMatrixDisplay);
137
138 return panel;
139 }
140
141 protected JComponent makeCharSetPanel() {
142 JPanel panel = new JPanel(true);
143
144
145
146 panel.setLayout(new GridLayout(17, 17, 0, 2));
147
148
149 panel.add(createHeader(""));
150 panel.add(createHeader("0"));
151 panel.add(createHeader("16"));
152 panel.add(createHeader("32"));
153 panel.add(createHeader("48"));
154 panel.add(createHeader("64"));
155 panel.add(createHeader("80"));
156 panel.add(createHeader("96"));
157 panel.add(createHeader("112"));
158 panel.add(createHeader("128"));
159 panel.add(createHeader("144"));
160 panel.add(createHeader("160"));
161 panel.add(createHeader("176"));
162 panel.add(createHeader("192"));
163 panel.add(createHeader("208"));
164 panel.add(createHeader("224"));
165 panel.add(createHeader("240"));
166
167 for (int column = 0; column < 16; column++) {
168 panel.add(createHeader(Integer.toString(column)));
169 panel.add(createCharacter((char) column));
170 panel.add(createCharacter((char) (16 + column)));
171 panel.add(createCharacter((char) (32 + column)));
172 panel.add(createCharacter((char) (48 + column)));
173 panel.add(createCharacter((char) (64 + column)));
174 panel.add(createCharacter((char) (80 + column)));
175 panel.add(createCharacter((char) (96 + column)));
176 panel.add(createCharacter((char) (112 + column)));
177 panel.add(createCharacter((char) (128 + column)));
178 panel.add(createCharacter((char) (144 + column)));
179 panel.add(createCharacter((char) (160 + column)));
180 panel.add(createCharacter((char) (176 + column)));
181 panel.add(createCharacter((char) (192 + column)));
182 panel.add(createCharacter((char) (208 + column)));
183 panel.add(createCharacter((char) (224 + column)));
184 panel.add(createCharacter((char) (240 + column)));
185 }
186
187 return panel;
188 }
189
190 protected JComponent createHeader(String s) {
191 JLabel label = new JLabel(s);
192
193 return label;
194 }
195
196 protected JDotMatrixSixByEight createCharacter(char c) {
197 JDotMatrixSixByEight character = new JDotMatrixSixByEight();
198 character.setForeground(Color.RED);
199 character.setBackground(Color.BLACK);
200 character.setChar(c);
201 character.setToolTipText(Integer.toString((int) c));
202
203 return character;
204 }
205
206
207
208
209
210 private static void createAndShowGUI() {
211
212 JFrame frame = new JFrame("virtlcd Demo");
213 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
214
215
216 frame.add(new TestHarness());
217
218
219 frame.pack();
220 frame.setVisible(true);
221 }
222
223 private class CharacterDocumentListener implements DocumentListener {
224 public CharacterDocumentListener() {
225
226 }
227
228 public void insertUpdate(DocumentEvent e) {
229 updateText(e.getDocument());
230 }
231
232 public void removeUpdate(DocumentEvent e) {
233 updateText(e.getDocument());
234 }
235
236 public void changedUpdate(DocumentEvent e) {
237 updateText(e.getDocument());
238 }
239
240 protected void updateText(Document document) {
241 String text;
242 try {
243 text = document.getText(0, document.getLength());
244 if (text.length() > 0) {
245 characterTestDotMatrixCharacter.setChar(text.charAt(0));
246 } else {
247 characterTestDotMatrixCharacter.setChar(' ');
248 }
249 } catch (BadLocationException e1) {
250 e1.printStackTrace();
251 characterTestDotMatrixCharacter.setChar(' ');
252 }
253 }
254 }
255
256 private class DisplayDocumentListener implements DocumentListener {
257 public DisplayDocumentListener() {
258
259 }
260
261 public void insertUpdate(DocumentEvent e) {
262 updateText(e.getDocument());
263 }
264
265 public void removeUpdate(DocumentEvent e) {
266 updateText(e.getDocument());
267 }
268
269 public void changedUpdate(DocumentEvent e) {
270 updateText(e.getDocument());
271 }
272
273 protected void updateText(Document document) {
274 String text;
275 try {
276 text = document.getText(0, document.getLength());
277
278 displayTestDotMatrixDisplay.setText(text);
279 } catch (BadLocationException e1) {
280 e1.printStackTrace();
281 displayTestDotMatrixDisplay.setText("");
282 }
283 }
284 }
285 }