-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathchapter17.java
443 lines (320 loc) · 10.5 KB
/
chapter17.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
// A simple Swing program.
import javax.swing.*;
class SwingDemo {
SwingDemo() {
// Create a new JFrame container.
JFrame jfrm = new JFrame("A Simple Swing Application");
// Give the frame an initial size.
jfrm.setSize(275, 100);
// Terminate the program when the user closes the application.
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create a text-based label.
JLabel jlab = new JLabel(" Swing defines the modern Java GUI.");
// Add the label to the content pane.
jfrm.add(jlab);
// Display the frame.
jfrm.setVisible(true);
}
public static void main(String[] args) {
// Create the frame on the event dispatching thread.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new SwingDemo();
}
});
}
}
// -----------------------------------------
// Demonstrate a button.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ButtonDemo implements ActionListener {
JLabel jlab;
ButtonDemo() {
// Create a new JFrame container.
JFrame jfrm = new JFrame("A Button Example");
// Specify FlowLayout for the layout manager.
jfrm.setLayout(new FlowLayout());
// Give the frame an initial size.
jfrm.setSize(220, 90);
// Terminate the program when the user closes the application.
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Make two buttons.
JButton jbtnFirst = new JButton("First");
JButton jbtnSecond = new JButton("Second");
// Add action listeners.
jbtnFirst.addActionListener(this);
jbtnSecond.addActionListener(this);
// Add the buttons to the content pane.
jfrm.add(jbtnFirst);
jfrm.add(jbtnSecond);
// Create a text-based label.
jlab = new JLabel("Press a button.");
// Add the label to the frame.
jfrm.add(jlab);
// Display the frame.
jfrm.setVisible(true);
}
// Handle button events.
public void actionPerformed(ActionEvent ae) {
if(ae.getActionCommand().equals("First"))
jlab.setText("First button was pressed.");
else
jlab.setText("Second button was pressed. ");
}
public static void main(String[] args) {
// Create the frame on the event dispatching thread.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new ButtonDemo();
}
});
}
}
// -----------------------------------------
// Try This 17-1: A Simple stopwatch.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
class StopWatch implements ActionListener {
JLabel jlab;
long start; // holds the start time in milliseconds
StopWatch() {
// Create a new JFrame container.
JFrame jfrm = new JFrame("A Simple Stopwatch");
// Specify FlowLayout for the layout manager.
jfrm.setLayout(new FlowLayout());
// Give the frame an initial size.
jfrm.setSize(230, 90);
// Terminate the program when the user closes the application.
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Make two buttons.
JButton jbtnStart = new JButton("Start");
JButton jbtnStop = new JButton("Stop");
// Add action listeners.
jbtnStart.addActionListener(this);
jbtnStop.addActionListener(this);
// Add the buttons to the content pane.
jfrm.add(jbtnStart);
jfrm.add(jbtnStop);
// Create a text-based label.
jlab = new JLabel("Press Start to begin timing.");
// Add the label to the frame.
jfrm.add(jlab);
// Display the frame.
jfrm.setVisible(true);
}
// Handle button events.
public void actionPerformed(ActionEvent ae) {
// get the current system time
Calendar cal = Calendar.getInstance();
if(ae.getActionCommand().equals("Start")) {
// Store start time.
start = cal.getTimeInMillis();
jlab.setText("Stopwatch is Running...");
}
else
// Compute the elapsed time.
jlab.setText("Elapsed time is "
+ (double) (cal.getTimeInMillis() - start)/1000);
}
public static void main(String[] args) {
// Create the frame on the event dispatching thread.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new StopWatch();
}
});
}
}
// -----------------------------------------
// Demonstrate a text field.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class JTextFieldDemo implements ActionListener {
JTextField jtf;
JLabel jlab;
JTextFieldDemo() {
// Create a new JFrame container.
JFrame jfrm = new JFrame("A Text Field Example");
// Specify FlowLayout for the layout manager.
jfrm.setLayout(new FlowLayout());
// Give the frame an initial size.
jfrm.setSize(240, 90);
// Terminate the program when the user closes the application.
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create a text field instance.
jtf = new JTextField(10);
// Add an action listener for the text field.
jtf.addActionListener(this);
// Add the text field to the content pane.
jfrm.add(jtf);
// Create an empty text-based label.
jlab = new JLabel("");
// Add the label to the frame.
jfrm.add(jlab);
// Display the frame.
jfrm.setVisible(true);
}
// Handle action events.
public void actionPerformed(ActionEvent ae) {
// Obtain the current text and display it in a label.
jlab.setText("Current contents: " + jtf.getText());
}
public static void main(String[] args) {
// Create the frame on the event dispatching thread.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new JTextFieldDemo();
}
});
}
}
// -----------------------------------------
// Use two text fields.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class TwoTFDemo implements ActionListener {
JTextField jtf1;
JTextField jtf2;
JLabel jlab;
TwoTFDemo() {
// Create a new JFrame container.
JFrame jfrm = new JFrame("Use Two Text Fields");
// Specify FlowLayout for the layout manager.
jfrm.setLayout(new FlowLayout());
// Give the frame an initial size.
jfrm.setSize(240, 120);
// Terminate the program when the user closes the application.
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create two text field instances.
jtf1 = new JTextField(10);
jtf2 = new JTextField(10);
// Set the action commands.
jtf1.setActionCommand("One");
jtf2.setActionCommand("Two");
// Add action listeners for the text fields.
jtf1.addActionListener(this);
jtf2.addActionListener(this);
// Add the text fields to the content pane.
jfrm.add(jtf1);
jfrm.add(jtf2);
// Create an empty text-based label.
jlab = new JLabel("");
// Add the label to the frame.
jfrm.add(jlab);
// Display the frame.
jfrm.setVisible(true);
}
// Handle action events.
public void actionPerformed(ActionEvent ae) {
if(ae.getActionCommand().equals("One"))
jlab.setText("ENTER pressed in tf1: "
+ jtf1.getText());
else
jlab.setText("ENTER pressed in jtf2: "
+ jtf2.getText());
}
public static void main(String[] args) {
// Create the frame on the event dispatching thread.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TwoTFDemo();
}
});
}
}
// -----------------------------------------
// Try This 17-2: A simple code machine.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Coder implements ActionListener {
JTextField jtfPlaintext;
JTextField jtfCiphertext;
Coder() {
// Create a new JFrame container.
JFrame jfrm = new JFrame("A Simple Code Machine");
// Specify FlowLayout for the layout manager.
jfrm.setLayout(new FlowLayout());
// Give the frame an initial size.
jfrm.setSize(340, 130);
// Terminate the program when the user closes the application.
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create two labels.
JLabel jlabPlaintext = new JLabel(" Plain Text: ");
JLabel jlabCiphertext = new JLabel("Cipher Text: ");
// Create two text field instances.
jtfPlaintext = new JTextField(20);
jtfCiphertext = new JTextField(20);
// Set the action commands for the text fields.
jtfPlaintext.setActionCommand("Encode");
jtfCiphertext.setActionCommand("Decode");
// Add action listeners for the text fields.
jtfPlaintext.addActionListener(this);
jtfCiphertext.addActionListener(this);
// Add the text fields and labels to the content pane.
jfrm.add(jlabPlaintext);
jfrm.add(jtfPlaintext);
jfrm.add(jlabCiphertext);
jfrm.add(jtfCiphertext);
// Create push button instances.
JButton jbtnEncode = new JButton("Encode");
JButton jbtnDecode = new JButton("Decode");
JButton jbtnReset = new JButton("Reset");
// Add action listeners for the buttons.
jbtnEncode.addActionListener(this);
jbtnDecode.addActionListener(this);
jbtnReset.addActionListener(this);
// Add the buttons to the content pane.
jfrm.add(jbtnEncode);
jfrm.add(jbtnDecode);
jfrm.add(jbtnReset);
// Display the frame.
jfrm.setVisible(true);
}
// Handle action events.
public void actionPerformed(ActionEvent ae) {
// If action command is "Encode" then encode the string.
if(ae.getActionCommand().equals("Encode")) {
// This will hold the encoded string.
String encStr = "";
// Obtain the plain text.
String str = jtfPlaintext.getText();
// Add 1 to each character.
for(int i=0; i<str.length(); i++)
encStr += (char)(str.charAt(i) + 1);
// Set the coded text into the Cipher Text field.
jtfCiphertext.setText(encStr.toString());
}
// If action command is "Decode" then decode the string.
else if(ae.getActionCommand().equals("Decode")) {
// This will hold the decoded string.
String decStr = "";
// Obtain the cipher text.
String str = jtfCiphertext.getText();
// Subtract 1 from each character.
for(int i=0; i<str.length(); i++)
decStr += (char)(str.charAt(i) - 1);
// Set the decoded text into the Plain Text field.
jtfPlaintext.setText(decStr.toString());
}
// Otherwise, must be "Reset" command.
else {
jtfPlaintext.setText("");
jtfCiphertext.setText("");
}
}
public static void main(String[] args) {
// Create the frame on the event dispatching thread.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Coder();
}
});
}
}