//
Progress Monitor
/** */ /**
* @version 1.00 1999-07-17
* @author Cay Horstmann
*/
import java.awt. * ;
import java.awt.event. * ;
import java.util. * ;
import javax.swing. * ;
import javax.swing.event. * ;
public class ProgressMonitorTest ... {
public static void main(String[] args)
...{ JFrame frame = new ProgressMonitorFrame();
frame.show();
}
}
class ProgressMonitorFrame extends JFrame
... { public ProgressMonitorFrame()
...{ setTitle("ProgressMonitorTest");
setSize(300, 200);
addWindowListener(new WindowAdapter()
...{ public void windowClosing(WindowEvent e)
...{ System.exit(0);
}
} );
Container contentPane = getContentPane();
// this text area holds the activity output
textArea = new JTextArea();
// set up a button panel
JPanel panel = new JPanel();
startButton = new JButton("Start");
panel.add(startButton);
contentPane.add(new JScrollPane(textArea), "Center");
contentPane.add(panel, "South");
// set up the button action
startButton.addActionListener(
new ActionListener()
...{ public void actionPerformed(ActionEvent event)
...{ // start activity
activity = new SimulatedActivity(1000);
activity.start();
// launch progress dialog
progressDialog = new ProgressMonitor(
ProgressMonitorFrame.this,
"Waiting for Simulated Activity",
null, 0, activity.getTarget());
// start timer
activityMonitor.start();
startButton.setEnabled(false);
}
});
// set up the timer action
activityMonitor = new Timer(500,
new ActionListener()
...{ public void actionPerformed(ActionEvent event)
...{ int current = activity.getCurrent();
// show progress
textArea.append(current + " ");
progressDialog.setProgress(current);
// check if task is completed or canceled
if (current == activity.getTarget()
|| progressDialog.isCanceled())
...{ activityMonitor.stop();
progressDialog.close();
activity.interrupt();
startButton.setEnabled(true);
}
}
});
}
private Timer activityMonitor;
private JButton startButton;
private ProgressMonitor progressDialog;
private JTextArea textArea;
private SimulatedActivity activity;
}
class SimulatedActivity extends Thread
... { public SimulatedActivity(int t)
...{ current = 0;
target = t;
}
public int getTarget()
...{ return target;
}
public int getCurrent()
...{ return current;
}
public void run()
...{ while (current < target && !interrupted())
...{ try
...{ sleep(100);
}
catch(InterruptedException e)
...{ return;
}
current++;
}
}
private int current;
private int target;
}
/** */ /**
* @version 1.00 1999-07-17
* @author Cay Horstmann
*/
import java.awt. * ;
import java.awt.event. * ;
import java.util. * ;
import javax.swing. * ;
import javax.swing.event. * ;
public class ProgressMonitorTest ... {
public static void main(String[] args)
...{ JFrame frame = new ProgressMonitorFrame();
frame.show();
}
}
class ProgressMonitorFrame extends JFrame
... { public ProgressMonitorFrame()
...{ setTitle("ProgressMonitorTest");
setSize(300, 200);
addWindowListener(new WindowAdapter()
...{ public void windowClosing(WindowEvent e)
...{ System.exit(0);
}
} );
Container contentPane = getContentPane();
// this text area holds the activity output
textArea = new JTextArea();
// set up a button panel
JPanel panel = new JPanel();
startButton = new JButton("Start");
panel.add(startButton);
contentPane.add(new JScrollPane(textArea), "Center");
contentPane.add(panel, "South");
// set up the button action
startButton.addActionListener(
new ActionListener()
...{ public void actionPerformed(ActionEvent event)
...{ // start activity
activity = new SimulatedActivity(1000);
activity.start();
// launch progress dialog
progressDialog = new ProgressMonitor(
ProgressMonitorFrame.this,
"Waiting for Simulated Activity",
null, 0, activity.getTarget());
// start timer
activityMonitor.start();
startButton.setEnabled(false);
}
});
// set up the timer action
activityMonitor = new Timer(500,
new ActionListener()
...{ public void actionPerformed(ActionEvent event)
...{ int current = activity.getCurrent();
// show progress
textArea.append(current + " ");
progressDialog.setProgress(current);
// check if task is completed or canceled
if (current == activity.getTarget()
|| progressDialog.isCanceled())
...{ activityMonitor.stop();
progressDialog.close();
activity.interrupt();
startButton.setEnabled(true);
}
}
});
}
private Timer activityMonitor;
private JButton startButton;
private ProgressMonitor progressDialog;
private JTextArea textArea;
private SimulatedActivity activity;
}
class SimulatedActivity extends Thread
... { public SimulatedActivity(int t)
...{ current = 0;
target = t;
}
public int getTarget()
...{ return target;
}
public int getCurrent()
...{ return current;
}
public void run()
...{ while (current < target && !interrupted())
...{ try
...{ sleep(100);
}
catch(InterruptedException e)
...{ return;
}
current++;
}
}
private int current;
private int target;
}
// Progress Monitor InputStream Test
/** */ /**
* @version 1.00 1999-07-17
* @author Cay Horstmann
*/
import java.awt. * ;
import java.awt.event. * ;
import java.io. * ;
import java.util. * ;
import javax.swing. * ;
import javax.swing.event. * ;
public class ProgressMonitorInputStreamTest ... {
public static void main(String[] args)
...{ JFrame frame = new TextFrame();
frame.show();
}
}
class TextFrame extends JFrame
implements ActionListener
... { public TextFrame()
...{ setTitle("ProgressMonitorInputStreamTest");
setSize(300, 200);
addWindowListener(new WindowAdapter()
...{ public void windowClosing(WindowEvent e)
...{ System.exit(0);
}
} );
Container contentPane = getContentPane();
// this text area contains line counts and error messages
textArea = new JTextArea();
contentPane.add(new JScrollPane(textArea), "Center");
// set up menu
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);
openItem = new JMenuItem("Open");
openItem.addActionListener(this);
fileMenu.add(openItem);
exitItem = new JMenuItem("Exit");
exitItem.addActionListener(this);
fileMenu.add(exitItem);
}
public void actionPerformed(ActionEvent evt)
...{ Object source = evt.getSource();
if (source == openItem)
...{ // have user select file
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.setFileFilter(
new javax.swing.filechooser.FileFilter()
...{ public boolean accept(File f)
...{ String fname = f.getName().toLowerCase();
return fname.endsWith(".txt")
|| f.isDirectory();
}
public String getDescription()
...{ return "Text Files"; }
});
int r = chooser.showOpenDialog(this);
if (r == JFileChooser.APPROVE_OPTION)
readFile(chooser.getSelectedFile());
}
else if (source == exitItem)
System.exit(0);
}
public void readFile(final File f)
...{ /**//* important: the monitored activity must be in a new
thread. We define a thread class on the fly; the thread
action is in the run method
*/
Thread readThread = new Thread()
...{ public void run()
...{ try
...{ // set up stream and reader filter sequence
FileInputStream fileIn = new FileInputStream(f);
ProgressMonitorInputStream progressIn
= new ProgressMonitorInputStream(TextFrame.this,
"Reading " + f.getName(), fileIn);
InputStreamReader inReader
= new InputStreamReader(progressIn);
BufferedReader in = new BufferedReader(inReader);
// read file and count lines
int count = 0;
String line;
while ((line = in.readLine()) != null)
count++;
textArea.append(f + ": " + count + " lines ");
fileIn.close();
}
catch(IOException e)
...{ textArea.append("Error " + e + " ");
}
}
};
readThread.start();
}
private JTextArea textArea;
private JMenuItem openItem;
private JMenuItem exitItem;
}