GUI程式設計基礎學習(六)——進度條、定時器、對話方塊
進度條JProgressBar
使用JProgressBar建立進度條元件,該元件可以使用一種顏色動態地填充自己,以便顯示某任務完成的百分比。
JProgressBar常用構造方法:
①JProgressBar():建立一個顯示邊框但不帶進度字串的水平進度條
②JProgressBar(BoundedRangeModel model):建立使用指定的儲存進度條資料模型的水平進度條
③JProgressBar(int orient):建立指定方向(JProgressBar.VERTICAL或JProgressBar.HORIZONTAL)的進度條
④JProgressBar(int min,int max):建立具有指定最小值和最大值的水平進度條
⑤JProgressBar(int orient,int min,int max):建立指定方向、最小值和最大值的進度條
JProgressBar常用方法:
①void setValue(int n):將進度條的當前值設定為n
②int getValue():返回進度條的當前值
③void setMininum(int min):設定最小值
④void setMaxinum(int max):設定最大值
定時器Timer
Timer元件可以定時執行任務,除此之外也可以通過執行緒定時休眠的方法達到定時執行任務的效果;
Timer常用構造方法:
①Timer(int delay,ActionListener listener)
該構造方法的引數delay是指定的時間週期毫秒數,引數listener用於指定一個接收該計時器操事件的監聽器,指定所要觸發的事件;如果要處理這個事件,必須實現ActionListener介面類以及介面類中的actionPerformed()方法。
對話方塊JOptionPane
JOptionPane是一種對話方塊的便捷使用形式,常用的作用是用來彈框提示或者彈框詢問;
JOptionPane常用方法:
①showConfirmDialog():確認對話方塊
②showInputDialog():輸入對話方塊
③showMessageDialog():訊息對話方塊
④showOptionDialog():選擇對話方塊
主要有五種訊息型別,型別不同,圖示不同:
①ERROR_MESSAGE :錯誤圖示
②INFORMATION_MESSAGE :訊息圖示
③WARNING_MESSAGE: 警告圖示
④QUESTION_MESSAGE :詢問圖示
⑤PLAIN_MESSAGE :沒有圖示
綜合案例:實現一個倒計時計時器,如果時間到了,彈框詢問是否重新計時,如果是則重新計時,如果否彈框提示退出程式。
解決方案1:使用Timer元件去完成定時器的功能
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Client extends JFrame {
public Client(){
JProgressBar progress = new JProgressBar(0,60);//建立一個最小值為0最大值為60的進度條
progress.setValue(60);//進度初始值設為60(100%)
Timer timer = new Timer(1000,new ActionListener(){//例項化一個定時器並實現ActionListener介面,每間隔一秒執行actionPerformed()方法
@Override
public void actionPerformed(ActionEvent e) {
int time = progress.getValue();//獲取當前進度值
time--;//進度值自減
progress.setValue(time);//設定進度值
if(time==0){//如果計時結束
int choice = JOptionPane.showConfirmDialog(null, "是否重新計時?","詢問",JOptionPane.YES_NO_OPTION);//獲取使用者選擇
if(choice==1){//否
JOptionPane.showMessageDialog(null, "退出程式");//彈框
System.exit(0);//退出
}else if(choice == 0){//是
progress.setValue(60);//初始化
}
}
}});
this.getContentPane().setLayout(new FlowLayout());//設定流佈局
this.getContentPane().add(new JLabel("倒計時:"));//新增標籤
this.getContentPane().add(progress);//新增進度條
timer.start();//開始計時
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//當用戶點選窗體右上角x時自動退出程式
pack();//自適應
setVisible(true);//展示窗體
setLocationRelativeTo(null);//讓視窗顯示在螢幕正中間
}
public static void main(String[] args) {
new Client();
}
}
解決方案2:使用執行緒類去完成定時器的功能
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Client extends JFrame {
public Client(){
JProgressBar progress = new JProgressBar(0,60);//建立一個最小值為0最大值為60的進度條
progress.setValue(60);//進度初始值設為60(100%)
Thread thread = new Thread(new Runnable() {//例項化一個執行緒,先休眠1秒,再進度值-1,如果進度值為0,彈框詢問
@Override
public void run() {
try {
while(true){//迴圈執行
Thread.sleep(1000);//先休眠1秒
int time = progress.getValue();//獲取當前進度值
time--;//進度值自減
progress.setValue(time);//設定進度值
if(time==0){//如果計時結束
int choice = JOptionPane.showConfirmDialog(null, "是否重新計時?","詢問",JOptionPane.YES_NO_OPTION);//獲取使用者選擇
if(choice==1){//否
JOptionPane.showMessageDialog(null, "退出程式");//彈框
System.exit(0);//退出
}else if(choice == 0){//是
progress.setValue(60);//初始化
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
this.getContentPane().setLayout(new FlowLayout());//設定流佈局
this.getContentPane().add(new JLabel("倒計時:"));//新增標籤
this.getContentPane().add(progress);//新增進度條
thread.start();//開始計時
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//當用戶點選窗體右上角x時自動退出程式
pack();//自適應
setVisible(true);//展示窗體
setLocationRelativeTo(null);//讓視窗顯示在螢幕正中間
}
public static void main(String[] args) {
new Client();
}
}
執行結果: