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();
	}

}

运行结果:

猜你喜欢

转载自blog.csdn.net/A1344714150/article/details/86251823