//CueBuilder.java //Generates a timeline for Multimedia //Demonstrates threading, date and time manipulation //Andy Harris, 05/00 import java.awt.*; import java.applet.*; import java.awt.event.*; import java.util.Date; import java.text.SimpleDateFormat; public class CueBuilder extends Applet implements Runnable{ Date startTime = new Date(); Date currentTime; SimpleDateFormat formatter = new SimpleDateFormat("mm:ss"); Label lblTimer = new Label("00:00"); TextArea txtCueList = new TextArea(); Button btnReset = new Button("Reset timer"); Button btnAddCue = new Button("Add Cue"); EventHandler evt = new EventHandler(); Thread theThread; public void init(){ //set up applet setLayout(new BorderLayout()); add(lblTimer, BorderLayout.NORTH); lblTimer.setAlignment(Label.CENTER); add(txtCueList, BorderLayout.CENTER); Panel pnlSouth = new Panel(); pnlSouth.add(btnReset); pnlSouth.add(btnAddCue); add(pnlSouth, BorderLayout.SOUTH); btnReset.addActionListener(evt); btnAddCue.addActionListener(evt); } // end init public void start(){ if (theThread == null){ theThread = new Thread(this); theThread.start(); } // end if } // end start public void stop(){ theThread = null; } // end stop public void run(){ while(true){ currentTime = new Date(); long elapsedRaw = currentTime.getTime() - startTime.getTime(); Date elapsedTime = new Date(elapsedRaw); String time = formatter.format(elapsedTime); lblTimer.setText(time); } // end while } // end run private class EventHandler implements ActionListener{ public void actionPerformed(ActionEvent e){ if (e.getSource() == btnReset){ startTime = new Date(); txtCueList.setText(""); } else if (e.getSource() == btnAddCue){ txtCueList.append(lblTimer.getText()); txtCueList.append("\t\n"); } // end if } //end actionPerformed } // end EventHandler } // end class def