Swing计时器(Timer)组件的使用
程序员文章站
2024-02-02 10:55:04
...
计时器(Timer)组件可以在指定时间间隔触发一个或多个 ActionEvent。设置计时器的过程包括创建一个 Timer 对象,在该对象上注册一个或多个动作侦听器,以及使用 start() 方法启动该计时器。具体如何过程如下:
一、构造方法
Timer timer = new Timer(int delay, ActionListener listener)
创建一个计时器,并初始化初始延迟和事件间延迟到延迟毫秒。如果延迟小于或等于0,则计时器将在启动时立即触发。如果listener不为空,它将在计时器上注册为动作监听器。
二、常用方法
创建 Timer 类之后,可以单独更改初始延迟和事件间延迟,并且可以添加其他 ActionListener。如果希望计时器只在第一次时触发然后停止,可以对计时器调用 setRepeats(false)。Timer 类的常用方法如下图:
三、实例
1、创建一个进度条,一个安装按钮,一个显示标签JLabel,和一个Timer组件。
2、给进度条,安装按钮和Timer组件添加监听,
1》点击安装按钮之后启动Timer计时器。
2》Timer计时器每隔10毫秒改变一次进度条的值,每次+1
3》进度条的值改变时触发监听,改变JLabel标签的值
3、运行效果如下:
4、代码如下:
package swing;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Toolkit;
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;
import javax.swing.Timer;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* 计时器
*/
public class Demo24_Timer implements ActionListener,ChangeListener{
JFrame frame=null;
JProgressBar progressbar;
JLabel label;
Timer timer;
JButton b;
public static void main(String[] args) {
new Demo24_Timer();
}
public Demo24_Timer() {
frame=new JFrame("软件安装");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane=frame.getContentPane();
label=new JLabel(" ",JLabel.CENTER); //创建显示进度信息的文本标签
label.setPreferredSize(new Dimension(300,50));
label.setFont(new Font("宋体", 1, 25));
progressbar=new JProgressBar(); //创建一个进度条
progressbar.setOrientation(JProgressBar.HORIZONTAL);
progressbar.setMinimum(0);
progressbar.setMaximum(100);
progressbar.setValue(0);
progressbar.setFont(new Font("宋体", 1, 20));
progressbar.setStringPainted(true);
progressbar.addChangeListener(this); //添加事件监听器
//设置进度条的几何形状
progressbar.setPreferredSize(new Dimension(700,50));
progressbar.setBorderPainted(true);
progressbar.setBackground(Color.pink);
JPanel centernPanel = new JPanel();
centernPanel.setBorder(new EmptyBorder(200,50,50,50));
centernPanel.add(progressbar);
//添加启动按钮
JPanel panel=new JPanel();
b=new JButton("安装");
b.setForeground(Color.blue);
//添加事件监听器
b.addActionListener(this);
panel.add(b);
timer=new Timer(10, this); //创建一个计时器,计时间隔为10毫秒
//把组件添加到frame中
contentPane.add(panel,BorderLayout.NORTH);
contentPane.add(centernPanel,BorderLayout.CENTER);
contentPane.add(label,BorderLayout.SOUTH);
SwingUtils.setCenter(frame);//设置窗体大小600*800并居中
frame.setVisible(true);
}
//进度条值改变的监听
@Override
public void stateChanged(ChangeEvent e) {
int value=progressbar.getValue();
if(e.getSource()==progressbar) {
label.setText("目前已完成进度:"+Integer.toString(value)+" %");
label.setForeground(Color.blue);
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b)//安装按钮监听:启动Timer计时器
timer.start();
if(e.getSource()==timer){//Timer计时器监听:每隔10毫秒,让进度条的值+1
int value=progressbar.getValue();
if(value<100){
progressbar.setValue(++value);
}
else{
timer.stop();
frame.dispose();
}
}
}
}
package swing;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class SwingUtils {
public static void setCenter(JFrame jf) {
int screenWidth=Toolkit.getDefaultToolkit().getScreenSize().width;
int screenHeight=Toolkit.getDefaultToolkit().getScreenSize().height;
int jframeWidth = 800;
int jframeHeight = 600;
jf.setBounds((screenWidth/2)-(jframeWidth/2), (screenHeight/2)-(jframeHeight/2),
jframeWidth, jframeHeight);
}
}
推荐阅读
-
Swing计时器(Timer)组件的使用
-
Swing 表格(JTable)的使用
-
详解:十分钟搞懂Cocos Creator碰撞组件的使用
-
Java~Swing中下拉式菜单JMenuBar(菜单栏)、JMenu(菜单)和JMenuItem(菜单项)的使用
-
Swing选项卡(JTabbedPane)的使用
-
win2003服务器使用WPS的COM组件的一些问题解决方法
-
LotusPhp笔记之:Cookie组件的使用详解
-
LotusPhp笔记之:Cookie组件的使用详解_PHP
-
java的Swing组件模拟qq登录界面
-
Java Swing组件JCheckBox和JRadioButton的简单使用