Mega Code Archive

 
Categories / Java / Swing JFC
 

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;    }       }