写了一个JAVA倒计时程序,和大家交流下。

no9988 2008-05-28 12:41:02
import java.awt.Container;
import java.awt.FlowLayout;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class TimeTest2 extends JFrame implements Runnable{
JFrame j;
JLabel jt = new JLabel();
JLabel jt1,jt2,jt3,jt4,jt5,jt6,jt7;
Thread clocker,cl;
JButton b2;
Container c;
String ss;
long m;
public TimeTest2(){
j = new JFrame();
c =j.getContentPane();
j.setLayout(new FlowLayout());
jt1 = new JLabel("当前时间为:");
jt2 = new JLabel("离考试结束还有:");
jt3 = new JLabel();
jt4 = new JLabel("秒");
jt5 = new JLabel("离考试结束还有:");
jt6 = new JLabel("");
jt7 = new JLabel("分钟");
jt3 = new JLabel();
j.add(jt1);j.add(jt);
j.add(jt2);j.add(jt3);j.add(jt4);
j.add(jt5);j.add(jt6);j.add(jt7);
jt3.setVisible(false);
jt6.setVisible(false);
j.setResizable(false);
j.setSize(200,150);
j.setLocation(350, 250);
j.setVisible(true);
j.setDefaultCloseOperation(EXIT_ON_CLOSE);
clocker=new Thread(this);
cl=new Thread(this);
clocker.start();

j.setLocation(830, 580);
Calendar rg = Calendar.getInstance();
rg.setTime(new java.util.Date());
m =rg.getTime().getTime(); //获得开始时候的那个时间点
}


public void run(){
while(true){
SimpleDateFormat df =new SimpleDateFormat("hh:mm:ss");
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(new java.util.Date());
long l1 = rightNow.getTime().getTime () ;
long l2 = m + 2*60*60*1000; // 从开始时刻开始 加两个小时
long mm= l2-l1;
long s = mm/(1000);
long min =mm/(60*1000);
String ss =String.valueOf(s);
String mi =String.valueOf(min);
jt3.setText(ss);
jt6.setText(mi);
jt.setText(df.format(new java.util.Date()));
try{
Thread.sleep(1);
}catch(InterruptedException e){}
j.setLocation(830, 580);
jt3.setVisible(true);
jt6.setVisible(true);
if( min==118 ){
JOptionPane.showMessageDialog( null,"对不起!答题时间已到!", "提示", JOptionPane.OK_CANCEL_OPTION);
}
}
}
public static void main(String[] args) {
new TimeTest2();
}
}

我刚刚学java
昨天写了个倒计时的程序
拿出来看下,
还有没有其他的写法
交流下`


还有对我写程序的风格有什么地方需要改的也说说`
谢谢
...全文
2513 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
rongjingjing 2011-10-30
  • 打赏
  • 举报
回复
额 可以帮我写一个jsp的 用在拍卖网站上的倒计时吗?我写的倒计时只能运行一个,而且一刷新又从头开始了!谢谢了
  • 打赏
  • 举报
回复
二楼太帅气了,代码太有型了,赞一个!楼主加油,刚开始学都这样,GOGO!
zengzhiquan2004 2009-09-28
  • 打赏
  • 举报
回复
2楼的评论厉害。如果帖子都有这样的回复就好了
Jia_Zimo 2008-08-03
  • 打赏
  • 举报
回复
支持。。。!!
rypgood 2008-06-01
  • 打赏
  • 举报
回复
我看了开头就开始晕了,
JFrame j;
JLabel jt = new JLabel();
JLabel jt1,jt2,jt3,jt4,jt5,jt6,jt7;

兄弟,要是你搞它几百个标签你就准备jt1一直到100??

过不了多少天你自己都不懂了
craky 2008-06-01
  • 打赏
  • 举报
回复
呵呵,大家太客气了吧~~~~~~~~~~
javatotheworld 2008-05-29
  • 打赏
  • 举报
回复
2楼的确很牛
no9988 2008-05-29
  • 打赏
  • 举报
回复
秒和分钟的那两个标签完全可以省掉呀,把字写在时间后面不就行了


这个方法我还没想到,呵呵,谢谢```


this.setLocation(830, 580);不知道你在线程中为什么还要写这一行

写这一行,会出现一个效果,就是程序一执行,窗口就会由桌面的(350, 250)跳到桌面的右下脚坐标(830, 580)去,并且通过线程功能,不断刷新这个方法使窗口固定在右下脚!

rg.setTime(new Date());完成没有必要,

测试了一下 好象真不需要。

既然是extends JFrame,为什么又要new JFrame()呢

这个不NEW 下面有句 c =j.getContentPane();
好象程序会出现 空指针异常```



你的程序写的真的很美观呀, 看起来就是那么舒服,我以后得多注意注意了`
no9988 2008-05-29
  • 打赏
  • 举报
回复
若没有外部调用,字段最好声明为private

import时最好不要用*

为什么jt1, jt2, jt3, jt4, jt5, jt6, jt7放在一行声明,而jt却要单独占一行呢,统一一下岂不是更好

意见宝贵呀,以后会多多注意滴, 呵呵!


this.setLocation(350, 250);this.setLocation(830, 580); 构造方法里出现了这两行,估计是笔误吧


this.setLocation(830, 580); 这句是笔误,多写了``` 呵呵


Calendar rg = Calendar.getInstance();
rg.setTime(new Date());
m = rg.getTime().getTime(); // 获得开始时候的那个时间点
这些与线程有关的都放到run里面去吧


这个不能放到线程里 这个如果放到线程里,那么我获得的那个开始点就会不断的刷新,那样的话,时间间隔就是一定的了
这个我测试过了 `不行


Thread.sleep(1);这个也太小了吧,1000够了
用 1000的话 有个地方不太雅观,如果用1 线程执行的太快,那里就会马上跳过去,肉眼就看不出来了,我测试过了,你可以调成1000后试下试下看``


craky 谢谢你哦! 呵呵,

H~~~ 2008-05-28
  • 打赏
  • 举报
回复
哈哈~
好的开始是成功的一半,GUI的应用确实少写,用js写完嵌到网页上会好些!
hardtoregistration 2008-05-28
  • 打赏
  • 举报
回复
我以前也写过一个,但是不是倒计时,是一个计时器,用Timer + TimeTask + SWT
kuikui06 2008-05-28
  • 打赏
  • 举报
回复
哈哈,评价的很有道理。
我也写过类似的手机版本的倒计时。
craky 2008-05-28
  • 打赏
  • 举报
回复
先说编程风格哈

字段命名不规范

若没有外部调用,字段最好声明为private

import时最好不要用*

为什么jt1, jt2, jt3, jt4, jt5, jt6, jt7放在一行声明,而jt却要单独占一行呢,统一一下岂不是更好


再说代码内容哈

既然是extends JFrame,为什么又要new JFrame()呢
不要在构造方法里放太多的东东
Thread cl、JButton b2、String ss、Container c都没有用到,还留着干嘛

this.setLocation(350, 250);this.setLocation(830, 580); 构造方法里出现了这两行,估计是笔误吧

方法里面最好不要用包名,比如rg.setTime(new java.util.Date());

Calendar rg = Calendar.getInstance();
rg.setTime(new Date());
m = rg.getTime().getTime(); // 获得开始时候的那个时间点
这些与线程有关的都放到run里面去吧

秒和分钟的那两个标签完全可以省掉呀,把字写在时间后面不就行了

lbLeaveSec.setVisible(false);
lbLeaveMin.setVisible(false);
这两行完全没有必要的


this.setLocation(830, 580);不知道你在线程中为什么还要写这一行
SimpleDateFormat df = new SimpleDateFormat("hh:mm:ss");写在循环外面岂不是更好
rg.setTime(new Date());完成没有必要,Calendar.getInstance()获取的就是当前时间

异常信息最好打印出来,e.printStackTrace();

Thread.sleep(1);这个也太小了吧,1000够了

JOptionPane.showMessageDialog(this, "对不起!答题时间已到!", "提示", JOptionPane.OK_OPTION); 这一行这么写岂不是更好

答题时间到的时候最好break


还有好多好多,我改了一下,你自己看看吧



import java.awt.FlowLayout;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class TimeCount extends JFrame implements Runnable
{
private static final long serialVersionUID = 3484639121843864203L;

private JLabel lbNow, lbNowTitle, lbLeftSecTitle, lbLeftSec, lbLeftMinTitle, lbLeftMin;

private Thread clocker;

public TimeCount()
{
this.setLayout(new FlowLayout());
this.setResizable(false);
this.setSize(200, 150);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocation(830, 580);
initUI();
clocker = new Thread(this);
clocker.start();
}

private void initUI()
{
lbNowTitle = new JLabel("当前时间为:");
lbNow = new JLabel();
lbLeftSecTitle = new JLabel("离考试结束还有:");
lbLeftSec = new JLabel();
lbLeftMinTitle = new JLabel("离考试结束还有:");
lbLeftMin = new JLabel("");

this.add(lbNowTitle);
this.add(lbNow);
this.add(lbLeftSecTitle);
this.add(lbLeftSec);
this.add(lbLeftMinTitle);
this.add(lbLeftMin);
}

public void run()
{
SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm:ss");
Calendar startCalendar = Calendar.getInstance();
long startTime = startCalendar.getTime().getTime(); // 获得开始时候的那个时间点
long endTime = startTime + 2 * 60 * 60 * 1000; // 从开始时刻开始 加两个小时
long nowTime, leftTime, leftSec, leftMin;
Calendar now;

while(true)
{
now = Calendar.getInstance();
nowTime = now.getTime().getTime();
leftTime = endTime - nowTime;
leftSec = leftTime / 1000;
leftMin = leftTime / (60 * 1000);

lbNow.setText(dateFormat.format(now.getTime()));
lbLeftSec.setText(leftSec + " 秒"); //若后面不加字符,可以lbLeftSec.setText(leftSec + ""); 不用String.valueOf
lbLeftMin.setText(leftMin + " 分钟");

if(leftSec == 0)
{
JOptionPane.showMessageDialog(this, "对不起!答题时间已到!", "提示", JOptionPane.OK_OPTION);
break;
}

try
{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}

public static void main(String[] args)
{
new TimeCount();
}
}
SSM项目基于微信小程序的公考学习平台的设计与实现pf.zip是一个使用Java语言开发的Web应用,它采用了SSM(Spring Spring MVC MyBatis)框架,并结合了微信小程序前端技术。该系统旨在为公务员考试的考生提供一个全面的学习和备考平台,使得用户能够在微信环境中方便地获取考试信息、参与在线学习和进行模拟测试。 项目的主要功能可能包括: 1. **资料库**:提供各类公务员考试的学习资料,包括历年真题、模拟题和参考答案。 2. **在线练习**:用户可以在线做题,系统提供即时反馈和答案解析。 3. **模拟考试**:创建真实的考试环境,让考生在规定时间内完成模拟试卷。 4. **进度跟踪**:记录用户的学习进度,包括已完成的课程和练习情况。 5. **错题集**:自动收录用户做错的题目,便于回顾和巩固易错点。 6. **考试提醒**:设置考试倒计时,提前通知用户考试日期和重要时间节点。 7. **社区交流**:提供交流论坛,供考生分享学习经验和答疑解惑。 8. **成绩分析**:对模拟考试成绩进行分析,帮助考生了解自己的强项和弱项。 整个项目采用MVC设计模式,Spring负责整体业务逻辑的处理和依赖注入,Spring MVC用于处理HTTP请求和页面跳转,而MyBatis负责与数据库的交互操作。数据库设计优化了存储结构和查询效率,以适应公考学习平台的需求。 这个项目适合计算机科学或软件工程专业的学生作为课程设计、毕业设计或实践项目。对于希望学习SSM框架、微信小程序开发以及教育类平台设计的开发者来说,这是一个实用的案例。通过参与这个项目,开发者不仅能提升Java Web开发技能,还能了解如何将现代Web技术应用于教育和职业培训领域,提高考生的学习效率和备考效果。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧