import java.awt.event.ActionListener
import java.awt.event.KeyEvent
import java.awt.event.KeyListener
import java.util.Timer
import java.util.TimerTask
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JLabel
import javax.swing.JTextField
public class TimeThreadFrame extends JFrame{
// 定义组件
private JLabel lblTime
private JTextField txtInput
private JButton btnEnter
// 构造方法
public TimeThreadFrame(){
// 设置窗体的相关属性
super("TimerThread")
this.setSize(300,200)
this.setLayout(null)
this.setLocation(100,50)
// 创建组件
this.lblTime = new JLabel("请输入倒计时时间")
this.lblTime.setBounds(30,20,200,30)
this.txtInput = new JTextField()
this.txtInput.setBounds(30,70,100,30)
this.btnEnter = new JButton("确定")
this.btnEnter.setBounds(150,70,70,30)
// 给JTextField注册监听
this.txtInput.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent ke) {
}
public void keyReleased(KeyEvent ke) {
}
public void keyTyped(KeyEvent ke) {
txtInput_KeyTyped(ke)
}
})
// 给JButton注册监听
this.btnEnter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
btnEnter_ActionPerformed(ae)
}
})
// 将各组件添加到窗体上
add(lblTime)
add(txtInput)
add(btnEnter)
// 显示窗体
this.setVisible(true)
}
// 输入时的事件处理,控制用户只能输入数字
public void txtInput_KeyTyped(KeyEvent ke){
if(ke.getKeyChar() <'0' || ke.getKeyChar() >'9'){
ke.setKeyChar('\0')
}
}
// 点击按钮时的事件处理,核心!
public void btnEnter_ActionPerformed(ActionEvent ae){
// 获得用户输入的倒计时时间
String strTime = this.txtInput.getText()
if(strTime.equals("")){
// 检测用户是否输入
this.lblTime.setText("您尚未输入,请输入!")
}
else{
Integer time = Integer.parseInt(strTime)
// 创建线程
TimeThread tt = new TimeThread(this.lblTime,time)
tt.start()
// 创建Timer
Timer timer = new Timer()
timer.schedule(new TimerTask(){
// 启动其他程序
public void run() {
System.out.print("ok")
}
}, time * 1000)
}
}
// 启动窗体
public static void main(String[] args){
new TimeThreadFrame()
}
}
// 时间线程类
class TimeThread extends Thread{
private JLabel lblTime
private int time
// 构造方法传入,显示事件的JLabel和倒计时的时间。
public TimeThread(JLabel lblTime, int time){
this.lblTime = lblTime
this.time = time
}
// run方法
public void run(){
while(time >0){
// 显示所剩时间
this.lblTime.setText("所剩时间:" + time)
// 所剩时间减少
time--
try {
this.sleep(1000)
} catch (InterruptedException e) {
e.printStackTrace()
}
}
}
}
import java.awt.BorderLayoutimport java.awt.Containerimport java.awt.Fontimport java.awt.GridLayoutimport java.awt.event.ActionEventimport java.awt.event.ActionListenerimport javax.swing.JButtonimport javax.swing.JFrameimport javax.swing.JOptionPaneimport javax.swing.JPanelimport javax.swing.JTextFieldpublic class TimerDemo extends JFrame implements ActionListener {private static final long serialVersionUID = 201306211111L private JTextField screen = new JTextField("0") private JButton start = new JButton("开始") private JButton reset = new JButton("重置") private JPanel panel = new JPanel() private boolean isRunning private int time private int timeBetween public TimerDemo(int timeBetween) {super("计时器") this.timeBetween = timeBetween try {init() } catch (Exception e) {e.printStackTrace() }}public TimerDemo() {super("计时器") this.timeBetween = 100 try {init() } catch (Exception e) {e.printStackTrace() }}private void init() {panel.setLayout(new GridLayout()) panel.add(start) panel.add(reset) start.addActionListener(this) reset.addActionListener(this) screen.setFont(new Font("幼圆", Font.BOLD, 60)) screen.setHorizontalAlignment(JTextField.CENTER) screen.setEditable(false) Container c = getContentPane() c.setLayout(new BorderLayout()) c.add(panel, BorderLayout.SOUTH) c.add(screen, BorderLayout.CENTER) this.setSize(200, 150) this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) this.setResizable(false) this.setLocationRelativeTo(null) this.setVisible(true) }public static void main(String[] args) {new TimerDemo(1)// 设定 1ms/次// new TimerDemo() }@Overridepublic void actionPerformed(ActionEvent e) {if (e.getSource() == start) {if (start.getText().equals("开始")) {start.setText("暂停") isRunning = true } else if (start.getText().equals("暂停")) {start.setText("开始") isRunning = false }}if (e.getSource() == reset) {start.setText("开始") screen.setText("0") isRunning = false time = 0 }new Thread(new TimeZone()).start() }class TimeZone implements Runnable {@Overridepublic void run() {while (isRunning) {time++ if (time >= Integer.MAX_VALUE) {screen.setText("ERROR") JOptionPane.showMessageDialog(null, "ERROR") isRunning = false }screen.setText(String.valueOf(time)) try {Thread.sleep(timeBetween) } catch (Exception e) {e.printStackTrace() }}}}}计时器可以使用timer类也可以使用线程类来 *** 作,下面是Thread做的简单的计时器
public class Calculagraph extends Thread {public static void main(String[] args) {
new Calculagraph().start()
}
private long now = 0l
private long start = System.currentTimeMillis()// 程序启动时间的毫秒值
private long time
public void run() {
while (true) {
now = System.currentTimeMillis()// 获取一秒之后的毫秒值
time = now - start// 两个时间相减的到毫秒差
System.out.format("%02d:%02d:%02d\n",
time / (1000 * 60 * 60) % 60/* 时 */,
time / (1000 * 60)% 60/* 分 */,
time / 1000 % 60/* 秒 */)// 格式化字符串输出
try {
Thread.sleep(1000)
} catch (InterruptedException e) {
e.printStackTrace()
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)