Swing开发之JProgressBar篇

JProgressBar是一个简单的组件,它一般是一种颜色部分或完全填充的矩形。缺省情况下,进度条配备了一个凹陷的边框,并水平放置。
  进度条还可以选择显示一个字符串,这个字符串在进度条矩形的中央位置上显示。这个字符串缺省时为耗时任务已完成的百分比。这个字符串可用JProgressBar.setString方法定制。
当你在安装一个新软件时,系统会告知你目前软件安装的进度如何?才不会让你觉得程序好像死了,同样的,若你设计的程序所
需要的运行超过2秒以上,你应该显示程序正在运行中的图标,或直接显示程序运行的进度,这样就能让用户清楚知道程序到底是死
了还是继续运行,在swing中,JProgressBar组件提供了类似这样的功能,它可以簋简单地输出进度的变化情况,让你想要提供进度
信息时,不再需要自行绘制绘图组件,只需要使用JProgressBar再加上几行程序设置就可以了。以下是JProgressBar的范例,在此
范例中,我们使用Timer组件当作控制进度杆移动的速度,当用户按下"start"按钮,则进度杆线就会开始向右移动,并显示出目前
的进度信息。每当JProgressBar的值改变一次(利用setValue()方法),就会触发一次ChangeEvent事件,如果你要处理这个事件,
你必须实作ChangeListener界面所定义的stateChanged()方法,在此我们是将JPogressBar的移动信息放在label上。

构造函数
JProgressBar()
          创建一个显示边框但不带进度字符串的水平进度条。
JProgressBar(BoundedRangeModel newModel)
          创建使用指定的保存进度条数据模型的水平进度条。
JProgressBar(int orient)
          创建具有指定方向(JProgressBar.VERTICAL 或 JProgressBar.HORIZONTAL)的进度条。
JProgressBar(int min, int max)
          创建具有指定最小值和最大值的水平进度条。
JProgressBar(int orient, int min, int max)
          创建使用指定方向、最小值和最大值的进度条。

常用方法
addChangeListener(ChangeListener l)
          将指定的 ChangeListener 添加到进度条。
getMaximum()
          返回进度条的最大值,该值存储在进度条的 BoundedRangeModel 中。
getMinimum()
          返回进度条的最小值,该值存储在进度条的 BoundedRangeModel 中。
getModel()
          返回此进度条使用的数据模型。
getString()
          返回进度字符串的当前值。
getValue()
          返回进度条的当前值,该值存储在进度条的 BoundedRangeModel 中。
setBorderPainted(boolean b)
          设置 borderPainted 属性,如果进度条应该绘制其边框,则此属性为 true。
setMaximum(int n)
          将进度条的最大值(存储在进度条的数据模型中)设置为 n。
setMinimum(int n)
          将进度条的最小值(存储在进度条的数据模型中)设置为 n。
setModel(BoundedRangeModel newModel)
          设置 JProgressBar 使用的数据模型。
setString(String s)
          设置进度字符串的值。
setValue(int n)
          将进度条的当前值(存储在进度条的数据模型中)设置为 n。
setUI(ProgressBarUI ui)
          设置呈现此组件的外观对象。

例 1:向JProgressBar设置值

Java代码
  1. import  java.awt.BorderLayout;  
  2. import  java.awt.event.ActionEvent;  
  3. import  java.awt.event.ActionListener;  
  4.   
  5. import  javax.swing.JButton;  
  6. import  javax.swing.JFrame;  
  7. import  javax.swing.JProgressBar;  
  8.   
  9. public   class  JProgressBarSetValue  extends  JFrame {  
  10.   JProgressBar bar = new  JProgressBar();  
  11.   JButton step = new  JButton( "Step" );  
  12.   
  13.   public  JProgressBarSetValue() {  
  14.     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  15.     step.addActionListener(new  ActionListener() {  
  16.       public   void  actionPerformed(ActionEvent e) {  
  17.         int  value = bar.getValue() +  7 ;  
  18.         if  (value > bar.getMaximum()) {  
  19.           value = bar.getMaximum();  
  20.         }  
  21.         bar.setValue(value);  
  22.       }  
  23.     });  
  24.   
  25.     getContentPane().add(bar, BorderLayout.NORTH);  
  26.     getContentPane().add(step, BorderLayout.EAST);  
  27.     pack();  
  28.     setVisible(true );  
  29.   }  
  30.   
  31.   public   static   void  main(String arg[]) {  
  32.     new  JProgressBarSetValue();  
  33.   }  
  34. }  
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JProgressBar;

public class JProgressBarSetValue extends JFrame {
  JProgressBar bar = new JProgressBar();
  JButton step = new JButton("Step");

  public JProgressBarSetValue() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    step.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        int value = bar.getValue() + 7;
        if (value > bar.getMaximum()) {
          value = bar.getMaximum();
        }
        bar.setValue(value);
      }
    });

    getContentPane().add(bar, BorderLayout.NORTH);
    getContentPane().add(step, BorderLayout.EAST);
    pack();
    setVisible(true);
  }

  public static void main(String arg[]) {
    new JProgressBarSetValue();
  }
}



例 2:用线程控制JProgressBar进度

Java代码
  1. import  java.awt.BorderLayout;  
  2. import  java.awt.event.ActionEvent;  
  3. import  java.awt.event.ActionListener;  
  4.   
  5. import  javax.swing.JButton;  
  6. import  javax.swing.JFrame;  
  7. import  javax.swing.JProgressBar;  
  8.   
  9. public   class  ProgressBarStep {  
  10.   static   class  BarThread  extends  Thread {  
  11.     private   static   int  DELAY =  500 ;  
  12.   
  13.     JProgressBar progressBar;  
  14.   
  15.     public  BarThread(JProgressBar bar) {  
  16.       progressBar = bar;  
  17.     }  
  18.   
  19.     public   void  run() {  
  20.       int  minimum = progressBar.getMinimum();  
  21.       int  maximum = progressBar.getMaximum();  
  22.       for  ( int  i = minimum; i < maximum; i++) {  
  23.         try  {  
  24.           int  value = progressBar.getValue();  
  25.           progressBar.setValue(value + 1 );  
  26.   
  27.           Thread.sleep(DELAY);  
  28.         } catch  (InterruptedException ignoredException) {  
  29.         }  
  30.       }  
  31.     }  
  32.   }  
  33.   
  34.   public   static   void  main(String args[]) {  
  35.     JFrame frame = new  JFrame( "Stepping Progress" );  
  36.     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  37.     final  JProgressBar aJProgressBar =  new  JProgressBar( 050 );  
  38.     aJProgressBar.setStringPainted(true );  
  39.   aJProgressBar.setBackground(Color.orange);  
  40.   aJProgressBar.setForeground(Color.red);  
  41.   
  42.     final  JButton aJButton =  new  JButton( "Start" );  
  43.   
  44.     ActionListener actionListener = new  ActionListener() {  
  45.       public   void  actionPerformed(ActionEvent e) {  
  46.         aJButton.setEnabled(false );  
  47.         Thread stepper = new  BarThread(aJProgressBar);  
  48.         stepper.start();  
  49.       }  
  50.     };  
  51.     aJButton.addActionListener(actionListener);  
  52.     frame.add(aJProgressBar, BorderLayout.NORTH);  
  53.     frame.add(aJButton, BorderLayout.SOUTH);  
  54.     frame.setSize(300200 );  
  55.     frame.setVisible(true );  
  56.   }  
  57. }  
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JProgressBar;

public class ProgressBarStep {
  static class BarThread extends Thread {
    private static int DELAY = 500;

    JProgressBar progressBar;

    public BarThread(JProgressBar bar) {
      progressBar = bar;
    }

    public void run() {
      int minimum = progressBar.getMinimum();
      int maximum = progressBar.getMaximum();
      for (int i = minimum; i < maximum; i++) {
        try {
          int value = progressBar.getValue();
          progressBar.setValue(value + 1);

          Thread.sleep(DELAY);
        } catch (InterruptedException ignoredException) {
        }
      }
    }
  }

  public static void main(String args[]) {
    JFrame frame = new JFrame("Stepping Progress");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    final JProgressBar aJProgressBar = new JProgressBar(0, 50);
    aJProgressBar.setStringPainted(true);
  aJProgressBar.setBackground(Color.orange);
  aJProgressBar.setForeground(Color.red);

    final JButton aJButton = new JButton("Start");

    ActionListener actionListener = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        aJButton.setEnabled(false);
        Thread stepper = new BarThread(aJProgressBar);
        stepper.start();
      }
    };
    aJButton.addActionListener(actionListener);
    frame.add(aJProgressBar, BorderLayout.NORTH);
    frame.add(aJButton, BorderLayout.SOUTH);
    frame.setSize(300, 200);
    frame.setVisible(true);
  }
}



例 3:获取JProgressBar值改变状况

Java代码
  1. import  java.awt.BorderLayout;  
  2. import  java.awt.Insets;  
  3. import  java.awt.Toolkit;  
  4. import  java.awt.event.ActionEvent;  
  5. import  java.awt.event.ActionListener;  
  6. import  java.beans.PropertyChangeEvent;  
  7. import  java.beans.PropertyChangeListener;  
  8. import  java.util.Random;  
  9.   
  10. import  javax.swing.BorderFactory;  
  11. import  javax.swing.JButton;  
  12. import  javax.swing.JComponent;  
  13. import  javax.swing.JFrame;  
  14. import  javax.swing.JPanel;  
  15. import  javax.swing.JProgressBar;  
  16. import  javax.swing.JScrollPane;  
  17. import  javax.swing.JTextArea;  
  18. import  javax.swing.SwingWorker;  
  19.   
  20. public   class  ProgressBarDemo2  extends  JPanel  implements  ActionListener,  
  21.     PropertyChangeListener {  
  22.   
  23.   private  JProgressBar progressBar;  
  24.   private  JButton startButton;  
  25.   private  JTextArea taskOutput;  
  26.   private  Task task;  
  27.   
  28.   class  Task  extends  SwingWorker<Void, Void> {  
  29.     /*  
  30.      * Main task. Executed in background thread.  
  31.      */   
  32.     @Override   
  33.     public  Void doInBackground() {  
  34.       Random random = new  Random();  
  35.       int  progress =  0 ;  
  36.       // Initialize progress property.   
  37.       setProgress(0 );  
  38.       // Sleep for at least one second to simulate "startup".   
  39.       try  {  
  40.         Thread.sleep(1000  + random.nextInt( 2000 ));  
  41.       } catch  (InterruptedException ignore) {  
  42.       }  
  43.       while  (progress <  100 ) {  
  44.         // Sleep for up to one second.   
  45.         try  {  
  46.           Thread.sleep(random.nextInt(1000 ));  
  47.         } catch  (InterruptedException ignore) {  
  48.         }  
  49.         // Make random progress.   
  50.         progress += random.nextInt(10 );  
  51.         setProgress(Math.min(progress, 100 ));  
  52.       }  
  53.       return   null ;  
  54.     }  
  55.   
  56.     /*  
  57.      * Executed in event dispatch thread  
  58.      */   
  59.     public   void  done() {  
  60.       Toolkit.getDefaultToolkit().beep();  
  61.       startButton.setEnabled(true );  
  62.       taskOutput.append("Done!/n" );  
  63.     }  
  64.   }  
  65.   
  66.   public  ProgressBarDemo2() {  
  67.     super ( new  BorderLayout());  
  68.   
  69.     // Create the demo's UI.   
  70.     startButton = new  JButton( "Start" );  
  71.     startButton.setActionCommand("start" );  
  72.     startButton.addActionListener(this );  
  73.   
  74.     progressBar = new  JProgressBar( 0100 );  
  75.     progressBar.setValue(0 );  
  76.   
  77.     // Call setStringPainted now so that the progress bar height   
  78.     // stays the same whether or not the string is shown.   
  79.     progressBar.setStringPainted(true );  
  80.   
  81.     taskOutput = new  JTextArea( 520 );  
  82.     taskOutput.setMargin(new  Insets( 5555 ));  
  83.     taskOutput.setEditable(false );  
  84.   
  85.     JPanel panel = new  JPanel();  
  86.     panel.add(startButton);  
  87.     panel.add(progressBar);  
  88.   
  89.     add(panel, BorderLayout.PAGE_START);  
  90.     add(new  JScrollPane(taskOutput), BorderLayout.CENTER);  
  91.     setBorder(BorderFactory.createEmptyBorder(20202020 ));  
  92.   }  
  93.   
  94.   /**  
  95.    * Invoked when the user presses the start button.  
  96.    */   
  97.   public   void  actionPerformed(ActionEvent evt) {  
  98.     progressBar.setIndeterminate(true );  
  99.     startButton.setEnabled(false );  
  100.     // Instances of javax.swing.SwingWorker are not reusuable, so   
  101.     // we create new instances as needed.   
  102.     task = new  Task();  
  103.     task.addPropertyChangeListener(this );  
  104.     task.execute();  
  105.   }  
  106.   
  107.   /**  
  108.    * Invoked when task's progress property changes.  
  109.    */   
  110.   public   void  propertyChange(PropertyChangeEvent evt) {  
  111.     if  ( "progress"  == evt.getPropertyName()) {  
  112.       int  progress = (Integer) evt.getNewValue();  
  113.       progressBar.setIndeterminate(false );  
  114.       progressBar.setValue(progress);  
  115.       taskOutput.append(String.format("Completed %d%% of task./n" , progress));  
  116.     }  
  117.   }  
  118.   
  119.   /**  
  120.    * Create the GUI and show it. As with all GUI code, this must run on the  
  121.    * event-dispatching thread.  
  122.    */   
  123.   private   static   void  createAndShowGUI() {  
  124.     // Create and set up the window.   
  125.     JFrame frame = new  JFrame( "ProgressBarDemo2" );  
  126.     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  127.   
  128.     // Create and set up the content pane.   
  129.     JComponent newContentPane = new  ProgressBarDemo2();  
  130.     newContentPane.setOpaque(true );  // content panes must be opaque   
  131.     frame.setContentPane(newContentPane);  
  132.   
  133.     // Display the window.   
  134.     frame.pack();  
  135.     frame.setVisible(true );  
  136.   }  
  137.   
  138.   public   static   void  main(String[] args) {  
  139.     // Schedule a job for the event-dispatching thread:   
  140.     // creating and showing this application's GUI.   
  141.     javax.swing.SwingUtilities.invokeLater(new  Runnable() {  
  142.       public   void  run() {  
  143.         createAndShowGUI();  
  144.       }  
  145.     });  
  146.   }  

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值