A program to test a progress monitor dialog.
/*
This program is a part of the companion code for Core Java 8th ed.
(http://horstmann.com/corejava)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ProgressMonitor;
import javax.swing.SwingWorker;
import javax.swing.Timer;
/**
* A program to test a progress monitor dialog.
* @version 1.04 2007-08-01
* @author Cay Horstmann
*/
public class ProgressMonitorTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new ProgressMonitorFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
/**
* A frame that contains a button to launch a simulated activity and a text area for the activity
* output.
*/
class ProgressMonitorFrame extends JFrame
{
public ProgressMonitorFrame()
{
setTitle("ProgressMonitorTest");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
// 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);
add(new JScrollPane(textArea), BorderLayout.CENTER);
add(panel, BorderLayout.SOUTH);
// set up the button action
startButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
startButton.setEnabled(false);
final int MAX = 1000;
// start activity
activity = new SimulatedActivity(MAX);
activity.execute();
// launch progress dialog
progressDialog = new ProgressMonitor(ProgressMonitorFrame.this,
"Waiting for Simulated Activity", null, 0, MAX);
cancelMonitor.start();
}
});
// set up the timer action
cancelMonitor = new Timer(500, new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
if (progressDialog.isCanceled())
{
activity.cancel(true);
startButton.setEnabled(true);
}
else if (activity.isDone())
{
progressDialog.close();
startButton.setEnabled(true);
}
else
{
progressDialog.setProgress(activity.getProgress());
}
}
});
}
private Timer cancelMonitor;
private JButton startButton;
private ProgressMonitor progressDialog;
private JTextArea textArea;
private SimulatedActivity activity;
public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
class SimulatedActivity extends SwingWorker<Void, Integer>
{
/**
* Constructs the simulated activity that increments a counter from 0 to a
* given target.
* @param t the target value of the counter.
*/
public SimulatedActivity(int t)
{
current = 0;
target = t;
}
protected Void doInBackground() throws Exception
{
try
{
while (current < target)
{
Thread.sleep(100);
current++;
textArea.append(current + "\n");
setProgress(current);
}
}
catch (InterruptedException e)
{
}
return null;
}
private int current;
private int target;
}
}
Related examples in the same category