进度条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();
}
}
运行结果: