JAVA ProgressBar系列之八

// 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(
300200);
      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",
                     
null0, 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(
300200);
      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;
}



 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值