简单的番茄工作法倒计时(源码)

新手,简单的番茄工作法倒计时,java实现,eclipse。

一个可执行文件,产生的一个计划事件txt,可手动编辑,每次打开软件会读取,每次关闭软件会保存。

贴上源码,由于比较简单,没有分层。

package pers.yuanzi.tomoto;

import java.awt.GridLayout;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Scanner;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

//主函数类,分别调用左右两视图

public class UI extends JFrame {

Text panel1 = new Text();

Time panel2 = new Time();

File file = new File("toDoList.txt");

public UI() {

try

{ //每次打开是读取文件,没有则创建

file.createNewFile();

Scanner input = new Scanner(file);

StringBuffer buffer = new StringBuffer();

while (input.hasNextLine()) {

buffer.append(input.nextLine());

}

panel1.text.setText(buffer.toString());

input.close();

}catch(Exception e)

{

e.printStackTrace();

throw new RuntimeException(e);

}

addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

//关闭时保存计划

String str = new String(panel1.text.getText());

try {

PrintWriter output = new PrintWriter(file);

output.print(str);

output.flush();

output.close();

} catch (FileNotFoundException e1) {

e1.printStackTrace();

throw new RuntimeException(e1);

}

//退出时提醒

if (JOptionPane.showConfirmDialog(null, "退出", "提示", JOptionPane.YES_NO_OPTION,

JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {

System.exit(0);

}

}

});

setLayout(new GridLayout(1, 2, 20, 20));

setTitle("Tomato");

setSize(700, 400);

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

setVisible(true);

add(panel1);

add(panel2);

}

public static void main(String[] args) {

UI ui =new UI();

}

}

package pers.yuanzi.tomoto;

import java.awt.BorderLayout;

import java.awt.Font;

import java.awt.GridLayout;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

//左边计划视图

public class Text extends JPanel{

JTextArea text = new JTextArea();

JLabel label = new JLabel("To do list:");

JLabel empty = new JLabel("");

int i = 0;

public Text() {

setLayout(new BorderLayout(10,10));

label.setFont(new Font("微软雅黑", Font.PLAIN, 14));

empty.setFont(new Font("微软雅黑", Font.PLAIN, 14));

text.setColumns(22);

text.setRows(22);

text.setLineWrap(true);

text.setWrapStyleWord(true);

text.setFont(new Font("微软雅黑", Font.PLAIN, 14));

JScrollPane scrollPanel = new JScrollPane(text);

add(label,BorderLayout.NORTH);

add(scrollPanel,BorderLayout.CENTER);

add(empty,BorderLayout.SOUTH);

}

}

package pers.yuanzi.tomoto;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Timer;

import java.util.TimerTask;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.Clip;

import javax.swing.JButton;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class Time extends JPanel {

JLabel label1 = new JLabel("时");

JLabel label2 = new JLabel("分");

JLabel label3 = new JLabel("秒");

JTextField text1 = new JTextField("0", 3);

JTextField text2 = new JTextField("30", 3);

JTextField text3 = new JTextField("0", 3);

JButton button2 = new JButton("暂停/恢复");

JButton button3 = new JButton("重置");

int hours = 0, minutes = 0, seconds = 0;

int stop = 1;

Timer timer = new Timer();

TimerTask timerTask = null;

public Time() {

//重置按钮默认30秒

button3.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

if (timerTask != null) {

stop = 1;

timerTask.cancel();

}

text1.setText("0");

text2.setText("30");

text3.setText("0");

}

});

//开始暂停按钮

button2.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

checkTime();

hours = Integer.parseInt(text1.getText());

minutes = Integer.parseInt(text2.getText());

seconds = Integer.parseInt(text3.getText());

if (1 == stop) {

stop = 0;

} else {

stop = 1;

}

//倒计时核心,创建一个倒计时更新视图

timer.schedule(timerTask = new TimerTask() {

@Override

public void run() {

if (1 == stop) {

text1.setText(hours + "");

text2.setText(minutes + "");

text3.setText(seconds + "");

this.cancel();

} else {

if (0 != seconds) {

seconds -= 1;

text3.setText(seconds + "");

} else if (0 != minutes) {

minutes -= 1;

text2.setText(minutes + "");

seconds = 59;

text3.setText(seconds + "");

} else if (0 != hours) {

hours -= 1;

text1.setText(hours + "");

minutes = 59;

text2.setText(minutes + "");

seconds = 59;

text3.setText(seconds + "");

} else {

this.cancel();

playSound();

JOptionPane.showMessageDialog(null, "时间到了!", "提示", JOptionPane.INFORMATION_MESSAGE);

stop = 1;

}

}

}

}, 0, 1000);

}

});

JPanel jPanel1 = new JPanel();

jPanel1.setLayout(new GridLayout(1, 6, 10, 10));

jPanel1.add(text1);

jPanel1.add(label1);

jPanel1.add(text2);

jPanel1.add(label2);

jPanel1.add(text3);

jPanel1.add(label3);

JPanel jPanel2 = new JPanel();

jPanel2.setLayout(new GridLayout(1, 2, 20, 20));

jPanel2.add(button2);

jPanel2.add(button3);

setLayout(new GridLayout(8, 1, 10, 20));

add(jPanel1);

add(jPanel2);

}

//检查时间是否正确输入

private void checkTime() {

if (!isDigit(text1.getText()) || !isDigit(text2.getText()) || !isDigit(text3.getText())

|| Integer.parseInt(text2.getText()) < 0 || Integer.parseInt(text2.getText()) > 59

|| Integer.parseInt(text2.getText()) < 0 || Integer.parseInt(text3.getText()) > 59

|| Integer.parseInt(text3.getText()) < 0) {

JOptionPane.showMessageDialog(null, "请输入合法范围的时间!", "提示", JOptionPane.INFORMATION_MESSAGE);

button3.doClick();

}

}

private boolean isDigit(String str) {

for (int i = 0; i < str.length(); i++) {

if (!Character.isDigit(str.charAt(i)))

return false;

}

return true;

}

//警告时的声音方法

private void playSound() {

/*AudioClip audioClip=getAudioClip(getCodeBase(),"directory of audio");

audioClip.play();*/

/*AudioClip au = null;

try {

au = Applet.newAudioClip(new File("近藤浩治 - Nintendo Mark.mid").toURL());

au.play();

} catch (MalformedURLException e) {

e.printStackTrace();

throw new RuntimeException(e);

}*/

try {

Clip clip = AudioSystem.getClip();

AudioInputStream inputStream = AudioSystem

.getAudioInputStream(Time.class.getResourceAsStream("近藤浩治 - Nintendo Mark.mid"));

clip.open(inputStream);

clip.start();

} catch (Exception e) {

System.err.println(e.getMessage());

}

}

}

来自为知笔记(Wiz)

时间: 2024-10-19 18:15:12

简单的番茄工作法倒计时(源码)的相关文章

简单Eclipse关联support.v4源码

最近很多人问我怎么关于v4包的API,其实这些都可以通过关联源码解决.但是很多人会发现当我们按住ctrl鼠标点击相应的方法或类时却发现无法查看,且无关联源码的按钮项.无法进行任何操作. 如下图所示: 那么我们需要怎么操作才能正确关联v4.v7.support等的其他源码呢?下面我简单做下操作示范.分别在windows和Mac下进行操作.操作步骤基本相类似,只是界面略微不同.这里只对win8.1下做详解.读者可根据操作步骤自己关联一下. 1.Windows平台下(win8.1): 1.1.在Ecl

OuNews 简单的新闻客户端应用源码

一直想练习MVP模式开发应用,把学习的RxJava.Retrofit等热门的开源库结合起来,于是写了这么一款新闻阅读软件, 有新闻.图片.视频三大模块,使用Retrofit和Okhttp实现无网读缓存,有网根据过期时间重新请求, 还有边缘或整页侧滑.夜间模式切换等小功能,还写了几个自定义小控件,虽然无啥卵用,但是学到了很多东西,很有收获. 源码下载:http://code.662p.com/view/13095.html 二.运行截图 <ignore_js_op>  <ignore_js

Android应用源码---简单的NB微博项目源码

本项目是一个新手写的微博安卓移动端,里面用的都是非常基础的知识.代码质量一般般,服务端是用花生壳搭的,现在已经挂掉了,所以只能借鉴一下客户端的源码.为了能看到主界面登陆部分已经注释掉.项目编码UTF-8默认编译版本4.4.2. 有需要的朋友可以下载:http://dwz.cn/yPbqE 以下是运行效果图

JavaSwing开发简单的银行管理系统 附源码

开发环境: Windows操作系统开发工具: MyEclipse/Eclipse+Jdk+mysql数据库 运行效果图: 源码及原文链接:https://javadao.xyz/forum.php?mod=viewthread&tid=36 原文地址:https://www.cnblogs.com/javadao/p/12319649.html

Android开发之一个简单的通讯录实现(源码)

通讯录就是一个ListView,我们需要通过数据库和ContentProvider来活动通讯录的数据,当然,我们应该提供选中后编辑的功能. 很简单的一个通讯略Demo,所以,直接上代码,需要的看一下就知道.不解释. 文件1: MyContacs 主活动页面. package com.yarin.android.MyContacts; import android.app.ListActivity; import android.content.ComponentName; import andr

Jquery倒计时源码分享

在静态页添加显示倒计时的容器,并引用下面脚本,代入时间参数即可使用. timeoutDate——到期时间,时间格式为2014/01/01或2014/1/1 D——天 H——小时 M——分钟 S——秒 xs——数字0~9 效果图: 代码展示: html: 复制代码代码如下: <span id="top_tuan_countdown"></span> jquery: 复制代码代码如下: $().ready(function () {    CcountDown([,

java实现倒计时源码分享

import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import javax.swing.JFrame; import javax.swing.JLabel; /** * * @author wesley * @date 2015年1月28日 * */ public class CountDown { private long longTime;

SharePoint 时间倒计时源码共享

今天老板让我们用SharePoint做了一个时间倒计时的插件,主要功能就是,手动输入你想查询的节日,然后输入日期,得出一个该节日的倒计时结果. 下面是主要代码内容: 第一个SharePoint成品,写的不好还望大家多多包含.如果有什么意见或建议还请给位大神提出来,以便于我的提高.

C++编写的一个简单的猜数字游戏源码

将开发过程比较重要的一些内容段做个记录,下面内容段是关于C++编写的一个简单的猜数字游戏的内容. #include <iostream> #include <string> #include <cstdlib> #include <cctype> #include <ctime> #include <conio.h> using namespace std; int main () { int wins = 0; int losses