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
|
package Jcd; // -- Listing-4 -- Display.java // 1
// 2
import java.util.*; // 3
import java.awt.*; // 4
import java.awt.event.*; // 5
import Jcd.SmartDrive; // 6
import Jcd.Monitor; // 7
// 8
class Display extends Panel implements Observer {
// 10
// Independent status display thread. // 11
// 12
private TextField trackField = new TextField(2);
private TextField indexField = new TextField(8);
private TextField timeField = new TextField(22);
// 16
private SmartDrive cdPlayer; // 17
private String prevText = ""; // 18
// 19
public Display(SmartDrive drive) // 20
{ // 21
setLayout(
new FlowLayout(FlowLayout.LEFT,5,5));// 22
indexField.setEditable(false); // 23
timeField.setEditable(false); // 24
// 25
cdPlayer = drive; // 26
add(trackField); // 27
add(indexField); // 28
add(timeField); // 29
// 30
trackField.addFocusListener(
new TrackFocusLost()); // 31
trackField.addKeyListener(
new TrackKeyPress()); // 32
// 33
cdPlayer.monitor.addObserver(this); // 34
} // 35
// 36
public void update(Observable obj, Object arg) {
Monitor mon = (Monitor) obj; // 38
if (mon.status != Drive.STATUS_INVALID) {
int time = ( // 40
mon.trackEndAddress[mon.currentTrack] -
mon.currentAddress) /
Drive.FRAMES_PER_SECOND; // 41
String newTrackText =
Integer.toString(mon.currentTrack); // 42
// Prevent excessive updates - so that
// the user can edit the field. // 43
if (prevText.compareTo(newTrackText) != 0) {
trackField.setText(newTrackText); // 45
prevText = newTrackText; // 46
} // 47
indexField.setText("Index: " + // 48
mon.currentIndex);
timeField.setText("Trk Rem: " + // 49
time/60 + " min " +
time%60 + " sec");
} // 50
} // 51
// 52
private class TrackFocusLost // 53
extends FocusAdapter { // 54
// removes text entered on focus out.
public void focusLost(FocusEvent e) { // 55
trackField.setText(prevText);
}
} // 56
// 57
private class TrackKeyPress extends KeyAdapter {
// 59
public void keyPressed(KeyEvent e) // 60
{ // 61
if (e.getKeyChar() == '\n') { // 62
try { // 63
cdPlayer.play( // 64
Integer.parseInt(trackField.getText()));
} // 65
catch (NumberFormatException nx) { // 66
System.out.println(
"Invalid track number: " + nx); // 67
} // 68
catch (DriveException dx) { // 69
System.out.println("Exception: " + dx);
} // 71
} // 72
} // 73
} // 74
// 75
} // 76
|