View Javadoc

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   * <p>
25   * Example program that provides examples of using the provide Swing components
26   * for displaying an LCD-like character display.
27   * </p>
28   * <p>
29   * This application displays three tabs:
30   * </p>
31   * <ul>
32   * <li>a single character:<br />
33   * <img src="../../../../images/screenshot-virtlcd_Demo-Character_test.png"
34   * alt="Character test screenshot" /></li>
35   * <li>a multi-line display:<br />
36   * <img src="../../../../images/screenshot-virtlcd_Demo-Display_test.png"
37   * alt="Display test screenshot" /></li>
38   * <li>a sample of all of the characters available:<br />
39   * <img src="../../../../images/screenshot-virtlcd_Demo-Character_set.png"
40   * alt="Character set screenshot" /></li>
41   * </ul>
42   * 
43   * @author Jesse Peterson
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  		// Schedule a job for the event-dispatching thread:
61  		// creating and showing this application's GUI.
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  		// Add the tabbed pane to this panel.
89  		add(tabbedPane);
90  
91  		// The following line enables to use scrolling tabs.
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 		// 17x17
145 		// panel.setLayout(new GridLayout(17, 17, 2, 2));
146 		panel.setLayout(new GridLayout(17, 17, 0, 2));
147 
148 		// row 0
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 	 * Create the GUI and show it. For thread safety, this method should be
208 	 * invoked from the event-dispatching thread.
209 	 */
210 	private static void createAndShowGUI() {
211 		// Create and set up the window.
212 		JFrame frame = new JFrame("virtlcd Demo");
213 		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
214 
215 		// Add content to the window.
216 		frame.add(new TestHarness());
217 
218 		// Display the window.
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 }