一、普通頁面的進度條
1、初始化進度條
Progressbar.setOrientation(JProgressBar.HORIZONTAL);//進度條的方向(水平)
Progressbar.setMinimum(0);//進度條最小值
progressbar.setMaximum(100);//最大值
progressbar.setValue(0);//設置進度條當前值
progressbar.setStringPainted(true);//設置進度條是否顯示進度信息
2、New 一個Timer並實現監聽接口:
//每隔50ms進度條的value加1
Timer timer=new Timer(50,new ActionListener(){
public void actionPerformed(ActionEvent e) {
//獲得進度條當前值
int value=jProgressBar1.getValue();
if(value<100){
value++;
jProgressBar1.setValue(value);
}else{
timer.stop();
jProgressBar1.setValue(0);
}
}
});
3、在進度條的jProgressBar1StateChanged事件中加入:
private void m_stateChanged() {
int value=jProgressBar1.getValue();
jLabel1.setText("目前進度已完成:"+value+"%");
}
4、點擊開始執行 timer.start();
總結:
對於能都通過一些方法知道程序進度的(比如文件的上傳和下載能夠通過已處理文件的大小和文件總共大小之間的比例算出進度)能夠應用可確定進度的進度條,但如果不能確認程序的執行進度(比如加載窗口中的組件不能判斷出程序已經加載了多少),這種情況只能使用不確定進度的進度條:(progressbar.setIndeterminate(true)不確定進度)
另外進度條還可以使用一些動態進度條圖片來代替,在耗時進程之前讓圖片顯示,耗時進程執行完後隱藏圖片,如:
jLabel_msg.setText("正在驗證,請等待...");
jLabel_load.setVisible(true);
//耗時進程
vo = Ench4newProxy.checkUser(vo);
jLabel_load.setVisible(false);
二、程序跳轉之間的進度條
應用進度條之前要找到這個程序的耗時進程是什麼,一般是連接數據庫和初始化窗口,那麼應該在main主線程中再開一個線程執行進度條,等到初始化窗口完畢後關閉進度條。
//運行線程
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
//驗證信息
m_checkInfo();
//初始窗口
ComUtil.setupLookAndFeel();
JFrame_Main shell = new JFrame_Main();
shell.setVisible(true);
}
});
問題:netbeans中自動生成的這個線程java.awt.EventQueue.invokeLater(new Runnable()很特別,進度條窗口打開後,進度條不動只有等到所有頁面全打開後才能動。
解決方法:將驗證信息和初始化窗口兩個方法放在java.awt.EventQueue.invokeLater(new Runnable()線程之外。如:
public static void main(String[] args) {
//運行進度條線程
final JProgressBar_Thread jprogressBar = new JProgressBar_Thread();
jprogressBar.start();
//驗證信息
m_checkInfo();
//初始窗口
jprogressBar_status = "初始化窗口……";
//運行線程
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame_Main shell = new JFrame_Main();
shell.setVisible(true);
//關閉進度條
jprogressBar.close();
}
});
}
1、新建一個JDialog窗口
加入進度條控件(JProgressBar)設置進度條爲不確定進度模式即屬性indeterminate爲true,並添加一些其他控件。
New 一個timer類,不斷監聽主程序的運行進度,並顯示:
/**
* 監聽進度條狀態
*/
private Timer timer=new Timer(50,new ActionListener(){
public void actionPerformed(ActionEvent e) {
jLabel1.setText(JFrame_Main.jprogressBar_status);
}
});
2、新建一個進度條線程類
/**
* 進度條窗口線程
*/
static class JProgressBar_Thread extends Thread{
JDialog_JProgressBar dialog;
public void run(){
//得到屏幕方法
double width = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
double height = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
dialog = new JDialog_JProgressBar(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setLocation((int) (width - dialog.getWidth()) / 2, (int) (height - dialog.getHeight()) / 2);
dialog.setVisible(true);
}
public void close(){
dialog.dispose();
}
}
3、在main主線程中開始進度條線程,並且在窗口打開後關閉進度條窗口
三、swing組件的樣式
通過:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
設置swing爲當前系統的樣式
還可以設置其他樣式如:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");