16、Java Swing JProgressBar:进度条组件
**進(jìn)度條(JProgressBar)**是一種以可視化形式顯示某些任務(wù)進(jìn)度的組件。
JProgressBar 類(lèi)實(shí)現(xiàn)了一個(gè)用于為長(zhǎng)時(shí)間的操作提供可視化指示器的 GUI 進(jìn)度條。在任務(wù)的完成進(jìn)度中,進(jìn)度條顯示該任務(wù)完成的百分比。此百分比通常由一個(gè)矩形以可視化形式表示,該矩形開(kāi)始是空的,隨著任務(wù)的完成逐漸被填充。此外,進(jìn)度條可顯示此百分比的文本表示形式。
JProgressBar 類(lèi)的常用構(gòu)造方法和 JSlider 類(lèi)的常用構(gòu)造方法一樣,這里不再重復(fù)。如下示例代碼演示了如何創(chuàng)建一個(gè) JProgressBar 類(lèi)實(shí)例。
//
JProgressBar 類(lèi)的常用方法:
- getMaximum() ----返回進(jìn)度條的最大值
- getMinimum()---- 返回進(jìn)度條的最小值
- getPercentComplete()---- 返回進(jìn)度條的完成百分比
- getString()---- 返回當(dāng)前進(jìn)度的 String 表示形式
- getValue() ----返回進(jìn)度條的當(dāng)前 value
- setBorderPainted(boolean b) ----設(shè)置 borderPainted 屬性,如果進(jìn)度條應(yīng)該繪制其邊框,則此屬性為true
- setIndeterminate(boolean newValue) ----設(shè)置進(jìn)度條的 indeterminate屬性,該屬性確定進(jìn)度條處于確定模式中還 是處于不確定模式中
- setMaximum(int n)---- 將進(jìn)度條的最大值設(shè)置為 n
- setMinimum(int n) ----將進(jìn)度條的最小值設(shè)置為 n
- setOrientation(int newOrientation) ----將進(jìn)度條的方向設(shè)置為 newOrientation
- setString(String s) ----設(shè)置進(jìn)度字符串的值
- setStringPainted(boolean b)----- 設(shè)置 stringPainted 屬性的值,該屬性確定進(jìn)度條是否應(yīng)該呈現(xiàn)進(jìn)度字符串
- setValue(int n) ----將進(jìn)度條的當(dāng)前值設(shè)置為 n
- updateUI() ----將 UI 屬性重置為當(dāng)前外觀對(duì)應(yīng)的值
其中,
setOrientation() 方法的參數(shù)值必須為 SwingConstants.VERTICAL 或 SwingConstants.HORIZONTAL。JProgressBar 使用 BoundedRangeModel 作為其數(shù)據(jù)模型,以 value 屬性表示該任務(wù)的“當(dāng)前”狀態(tài),minimum 和 maximum 屬性分別表示開(kāi)始點(diǎn)和結(jié)束點(diǎn)。
技巧:如果要執(zhí)行一個(gè)未知長(zhǎng)度的任務(wù),可以調(diào)用 setlndeterminate(true) 將進(jìn)度條設(shè)置為不確定模式。不確定模式的進(jìn)度條將持續(xù)地顯示動(dòng)畫(huà)來(lái)表示正進(jìn)行的操作。一旦可以確定任務(wù)長(zhǎng)度和進(jìn)度量,則應(yīng)該更新進(jìn)度條的值,將其切換到確定模式。
例 1
使用 JProgressBar 類(lèi)創(chuàng)建一個(gè)進(jìn)度條模擬程序升級(jí)過(guò)程,實(shí)現(xiàn)過(guò)程如下。
(1) 創(chuàng)建一個(gè)繼承自 JFrame 的 JProgressBarDemo 類(lèi)。
(2) 在構(gòu)造方法中添加一個(gè)空的進(jìn)度條,然后設(shè)置它的顯示屬性。主要代碼如下:
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("使用進(jìn)度條");JLabel label=new JLabel("歡迎使用在線升級(jí)功能!");//創(chuàng)建一個(gè)進(jìn)度條JProgressBar progressBar=new JProgressBar();JButton button=new JButton("完成");button.setEnabled(false);Container container=getContentPane();//獲取當(dāng)前窗口的內(nèi)容窗格container.setLayout(new GridLayout(3,1));//創(chuàng)建一個(gè)3行和1列的網(wǎng)格布局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); //添加標(biāo)簽panel2.add(progressBar); //添加進(jìn)度條panel3.add(button); //添加按鈕container.add(panel1);container.add(panel2);container.add(panel3);progressBar.setStringPainted(true);//進(jìn)度條是否顯示字符串//如果不需要進(jìn)度上顯示“升級(jí)進(jìn)行中...”,可注釋此行progressBar.setString("升級(jí)進(jìn)行中...");//設(shè)置進(jìn)度字符串的值//如果需要使用不確定模式,可使用此行//progressBar.setIndeterminate(true);//開(kāi)啟一個(gè)線程處理進(jìn)度new Progress(progressBar, button).start();//單機(jī)“完成”按鈕結(jié)束程序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); //設(shè)置容器的大小frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();} }(3) 創(chuàng)建 Progress 線程并實(shí)現(xiàn)對(duì)進(jìn)度條進(jìn)度的控制,實(shí)現(xiàn)代碼如下。
private class Progress extends Thread {JProgressBar progressBar;JButton button;//進(jìn)度條上的數(shù)字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();}//設(shè)置進(jìn)度條的值progressBar.setValue(progressValues[i]);}progressBar.setIndeterminate(false);progressBar.setString("升級(jí)完成!");button.setEnabled(true);} }上述代碼定義了一個(gè)進(jìn)度條的進(jìn)度數(shù)組 progressValues。線程每隔 1000 毫秒從數(shù)組中取一個(gè)數(shù)字作為當(dāng)前進(jìn)度,并使用 JProgressBar 類(lèi)的 setValue() 方法更新到進(jìn)度條。最后使進(jìn)度條顯示“升級(jí)完成!”字符串,并使“完成”按鈕可用。
圖 1 為程序的運(yùn)行效果。圖 2 為調(diào)用 Setlndeterminate(true) 方法后進(jìn)度條使用不確定模式的運(yùn)行效果。圖 3 為默認(rèn)的數(shù)字進(jìn)度條運(yùn)行效果。
總結(jié)
以上是生活随笔為你收集整理的16、Java Swing JProgressBar:进度条组件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 15、Java Swing JSlide
- 下一篇: 17、Java Swing Timer: