16、Java Swing JProgressBar:进度条组件
**進度條(JProgressBar)**是一種以可視化形式顯示某些任務進度的組件。
JProgressBar 類實現了一個用于為長時間的操作提供可視化指示器的 GUI 進度條。在任務的完成進度中,進度條顯示該任務完成的百分比。此百分比通常由一個矩形以可視化形式表示,該矩形開始是空的,隨著任務的完成逐漸被填充。此外,進度條可顯示此百分比的文本表示形式。
JProgressBar 類的常用構造方法和 JSlider 類的常用構造方法一樣,這里不再重復。如下示例代碼演示了如何創建一個 JProgressBar 類實例。
//
JProgressBar 類的常用方法:
- getMaximum() ----返回進度條的最大值
- getMinimum()---- 返回進度條的最小值
- getPercentComplete()---- 返回進度條的完成百分比
- getString()---- 返回當前進度的 String 表示形式
- getValue() ----返回進度條的當前 value
- setBorderPainted(boolean b) ----設置 borderPainted 屬性,如果進度條應該繪制其邊框,則此屬性為true
- setIndeterminate(boolean newValue) ----設置進度條的 indeterminate屬性,該屬性確定進度條處于確定模式中還 是處于不確定模式中
- setMaximum(int n)---- 將進度條的最大值設置為 n
- setMinimum(int n) ----將進度條的最小值設置為 n
- setOrientation(int newOrientation) ----將進度條的方向設置為 newOrientation
- setString(String s) ----設置進度字符串的值
- setStringPainted(boolean b)----- 設置 stringPainted 屬性的值,該屬性確定進度條是否應該呈現進度字符串
- setValue(int n) ----將進度條的當前值設置為 n
- updateUI() ----將 UI 屬性重置為當前外觀對應的值
其中,
setOrientation() 方法的參數值必須為 SwingConstants.VERTICAL 或 SwingConstants.HORIZONTAL。JProgressBar 使用 BoundedRangeModel 作為其數據模型,以 value 屬性表示該任務的“當前”狀態,minimum 和 maximum 屬性分別表示開始點和結束點。
技巧:如果要執行一個未知長度的任務,可以調用 setlndeterminate(true) 將進度條設置為不確定模式。不確定模式的進度條將持續地顯示動畫來表示正進行的操作。一旦可以確定任務長度和進度量,則應該更新進度條的值,將其切換到確定模式。
例 1
使用 JProgressBar 類創建一個進度條模擬程序升級過程,實現過程如下。
(1) 創建一個繼承自 JFrame 的 JProgressBarDemo 類。
(2) 在構造方法中添加一個空的進度條,然后設置它的顯示屬性。主要代碼如下:
import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; public class JProgressBarDemo extends JFrame {//static JProgressBarDemo frame;public JProgressBarDemo(){setTitle("使用進度條");JLabel label=new JLabel("歡迎使用在線升級功能!");//創建一個進度條JProgressBar progressBar=new JProgressBar();JButton button=new JButton("完成");button.setEnabled(false);Container container=getContentPane();//獲取當前窗口的內容窗格container.setLayout(new GridLayout(3,1));//創建一個3行和1列的網格布局JPanel panel1=new JPanel(new FlowLayout(FlowLayout.LEFT));JPanel panel2=new JPanel(new FlowLayout(FlowLayout.CENTER));JPanel panel3=new JPanel(new FlowLayout(FlowLayout.RIGHT));panel1.add(label); //添加標簽panel2.add(progressBar); //添加進度條panel3.add(button); //添加按鈕container.add(panel1);container.add(panel2);container.add(panel3);progressBar.setStringPainted(true);//進度條是否顯示字符串//如果不需要進度上顯示“升級進行中...”,可注釋此行progressBar.setString("升級進行中...");//設置進度字符串的值//如果需要使用不確定模式,可使用此行//progressBar.setIndeterminate(true);//開啟一個線程處理進度new Progress(progressBar, button).start();//單機“完成”按鈕結束程序button.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e){dispose();System.exit(0);}});}/*** @param args*/public static void main(String[] args){// TODO Auto-generated method stubJProgressBarDemo frame=new JProgressBarDemo();//frame.setBounds(300,200,300,150); //設置容器的大小frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();} }(3) 創建 Progress 線程并實現對進度條進度的控制,實現代碼如下。
private class Progress extends Thread {JProgressBar progressBar;JButton button;//進度條上的數字int[] progressValues={6,18,27,39,51,66,81,100};Progress(JProgressBar progressBar,JButton button){this.progressBar=progressBar;this.button=button;}public void run(){for(int i=0;i<progressValues.length;i++){try{Thread.sleep(3000);}catch(InterruptedException e){e.printStackTrace();}//設置進度條的值progressBar.setValue(progressValues[i]);}progressBar.setIndeterminate(false);progressBar.setString("升級完成!");button.setEnabled(true);} }上述代碼定義了一個進度條的進度數組 progressValues。線程每隔 1000 毫秒從數組中取一個數字作為當前進度,并使用 JProgressBar 類的 setValue() 方法更新到進度條。最后使進度條顯示“升級完成!”字符串,并使“完成”按鈕可用。
圖 1 為程序的運行效果。圖 2 為調用 Setlndeterminate(true) 方法后進度條使用不確定模式的運行效果。圖 3 為默認的數字進度條運行效果。
總結
以上是生活随笔為你收集整理的16、Java Swing JProgressBar:进度条组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 15、Java Swing JSlide
- 下一篇: 17、Java Swing Timer: