java中设置游戏的倒计时_java中关于倒计时的程序

本文介绍了两种在Java中使用Swing实现倒计时的方法。第一个程序创建了一个带有暂停功能的2小时倒计时,利用Thread和Calendar进行时间计算。第二个程序展示了创建一个到特定日期的倒计时牌,包括开始计时、停止计时和显示已过时间的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下是关于java中关于倒计时的程序,当然是采用SWING图形显示

源码一:

import java.awt.*;

import java.awt.event.*;

import java.util.Calendar;

import javax.swing.*;

public class Sleep extends JFrame {

static Sleep sleep;

JTextField jf;

JButton jButton1;

JButton jButton2;

Calendar now;

int hour;

int hourEnd;

int minute;

int minutend;

int second;

int secondend;

int hourend;

int minutePlus;

int secondPlus;

Thread t;

boolean right = true;

public Sleep() {

setSize(300, 200);

jf = new JTextField(25);

jf.setText("单击按纽进行相应的操作");

jButton1 = new JButton("显示时间剩余时间");

jButton2 = new JButton("暂停");

Container container = getContentPane();

container.setLayout(new FlowLayout());

container.add(jf, BorderLayout.NORTH);

container.add(jButton1);

container.add(jButton2);

now = Calendar.getInstance();

hourEnd = now.get(Calendar.HOUR_OF_DAY) + 1;

minutePlus = now.get(Calendar.MINUTE);

secondPlus = now.get(Calendar.SECOND);

t = new Thread(new Runnable() {

public void run() {

while (true) {

while (right) {

try {

Thread.sleep(100);

jf.setText(CalTime());

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

});

t.start();

jButton1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {

right = true;

}

});

jButton2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent g) {

right = false;

}

});

setVisible(true);

}

public String CalTime() {

now = Calendar.getInstance();

hour = now.get(Calendar.HOUR_OF_DAY);

minute = now.get(Calendar.MINUTE);

second = now.get(Calendar.SECOND);

if (hourEnd >= hour) {

hourend = hourEnd - hour;

secondend = 60 - second+secondPlus;

minutend = 59 - minute+minutePlus;

}

return "2小时倒计时hour: " + hourend + " minute: " + minutend

+ " second: " + secondend;

}

public static void main(String args[]) {

Sleep sleep = new Sleep();

sleep.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

} 源码二:

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.sql.Timestamp;

import java.text.SimpleDateFormat;

import java.util.*;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;

public class Count extends JFrame implements ActionListener{

private static final long serialVersionUID = -3439634693767815667L;

private JLabel startTime,pastTime,label1,label2;

private JButton ok;

private StringBuffer str;

private int y,m,d;

private boolean runflag=true;

public Count(){

super("倒计时牌");

init();

this.setSize(450,150);

Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

int h = (int) d.getHeight() / 3;

int w = (int) d.getWidth() / 3;

this.setLocation(w, h);

this.setVisible(true);

this.setResizable(false);

this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e) {

int exit=JOptionPane.showConfirmDialog(Count.this, "确定退出吗?", "退出", JOptionPane.OK_CANCEL_OPTION);

if(exit==JOptionPane.OK_OPTION)

System.exit(0);

}

});

}

private void init(){

label1=new JLabel("距2013年圣诞节还有:");

label2=new JLabel();

startTime=new JLabel("开始时间:");

pastTime=new JLabel("已过时间:");

JPanel north=new JPanel();

north.setLayout(new BorderLayout());

north.add(label1,BorderLayout.CENTER);

north.add(startTime,BorderLayout.NORTH);

this.add(north,BorderLayout.NORTH);

this.add(label2,BorderLayout.CENTER);

JPanel south=new JPanel();

south.setLayout(new BorderLayout());

JPanel south_center=new JPanel();

Calendar c=Calendar.getInstance();

ok=new JButton("开始计时");

south_center.add(ok);

south.add(south_center,BorderLayout.CENTER);

south.add(pastTime,BorderLayout.NORTH);

this.add(south,BorderLayout.SOUTH);

ok.addActionListener(this);

label1.setFont(new Font("宋体",Font.BOLD,20));

label2.setFont(new Font("宋体",Font.BOLD,26));

label1.setForeground(new Color(154,0,255));

label2.setForeground(Color.RED);

}

public synchronized void stopthread(){

runflag=false;

}

public synchronized void startthread(){

runflag=true;

}

public synchronized boolean getrunflag(){

return runflag;

}

class MyThread extends Thread{

Calendar target=null;

Calendar startTime=null;

long targetInMill=0;

long startInMill=0;

private MyThread(int y,int m,int d){

target=new GregorianCalendar(y,m-1,d);

startTime=Calendar.getInstance();

startInMill=startTime.getTimeInMillis();

targetInMill=target.getTimeInMillis();

}

public void run(){

while(runflag){

runflag=true;

Calendar today=new GregorianCalendar();

long todayInMill=today.getTimeInMillis();

long dd=targetInMill-todayInMill;

long dis=dd/1000;

StringBuffer d = new StringBuffer();

int day=(int) (dis/(3600*24));

d.append(day).append(" 天 ");

label2.setText(d.toString());

pastTime();

if(dd<=0){

ok.setText("重新开始");

JOptionPane.showMessageDialog(Count.this, "时间到");

break;

}

try {

Thread.sleep(10);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

private void pastTime(){

Calendar today=new GregorianCalendar();

long nowInMill=today.getTimeInMillis();

long dd=nowInMill-startInMill;

long dis=dd/1000;

long ms=(dd/100)%10;

long mms=(dd/10)%10;

StringBuffer d = new StringBuffer();

int day=(int) (dis/(3600*24));

int hour=(int) (dis%(3600*24)/3600);

int min=(int) (dis%3600/60);

int sec=(int) (dis%60);

d.append(day);

StringBuffer s=new StringBuffer();

s.append(d + " 天 ").append(intToString(hour)+" 小时 ").append(intToString(min)+" 分 ").append(intToString(sec)+" 秒").append(ms).append(" "+mms);

pastTime.setText("已过时间:"+s.toString());

}

}

public String intToString(int i){

str = new StringBuffer(100);

if(i<10){

str.append(0).append(i);

}

return str.toString();

}

public void actionPerformed(ActionEvent e) {

String str=e.getActionCommand();

MyThread t=null;

if(str.equals("开始计时")){

try {

this.startthread();

startTime.setText("开始时间:"+new Timestamp(System.currentTimeMillis()));

// ok.setEnabled(false);

ok.setText("停止");

t=new MyThread(2013,12,25);

t.start();

} catch (NumberFormatException e1) {

e1.printStackTrace();

}

}

if(str.equals("停止") || str.equals("重新开始")){

this.stopthread();

ok.setText("开始计时");

}

}

public static void main(String[] args) {

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

new Count();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (UnsupportedLookAndFeelException e) {

e.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值