首页 > 编程语言 >java桌面小闹钟

java桌面小闹钟

时间:2024-01-05 14:36:32浏览次数:40  
标签:桌面 java jar 60 闹钟 new import jDialog

需求

为防止整天久坐,编写一个桌面闹钟.该闹钟功能很简单,一个小时的倒计时,倒计时结束弹框提示起身运动下.点击确认后重新计时.且有一个复位按钮,可以重新计时.

代码

  1. 定义一个1小时的时间变量
  2. 创建一个GUI界面,有一个Label标签显示时间,一个Button进行复位操作
  3. 计时器每秒判断时间变量是否大于0.大于0减1,否则弹框提示并对时间变量复原
  4. 弹框点确认可以实现复位键的同样效果

代码如下:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.Timer;

public class AlarmClock {

    private static int countdownTime = 60*60 ; //一小时倒计时
	private static int countTime = 0;
	private static JFrame frame;
	private static JLabel timeLabel;
	private static JButton resetButton;
	private static JLabel uptimeLabel;

	public static void main(String[] args) {
		createdUI();
	}
	
	private static void createdUI(){
		frame = new JFrame("电脑桌面闹钟");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(300,200);
		frame.setLayout(new FlowLayout());
		
		timeLabel = new JLabel("剩余时间:"+countdownTime/60 +"分钟"+countdownTime%60+"秒;计时:");
		frame.add(timeLabel);
		
		uptimeLabel = new JLabel("00:00:00",SwingConstants.CENTER);
		frame.add(uptimeLabel);
		
		resetButton = new JButton("复位");
		resetButton.addActionListener(new ActionListener() {
	
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				countdownTime = 60*60 ; // 重新开始一小时计时
				countTime = 0;
				updateTimeLabel();
			}
		});
		frame.add(resetButton);
		
		Timer timer = new Timer(1000,new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				if (countdownTime > 0) {
					countdownTime --;
					countTime++;
					updateTimeLabel();
				}else{
					showDialog(frame);
				}
			}
		});
		timer.start();
		
		frame.setVisible(true);
	}

	
	private static void updateTimeLabel(){
		timeLabel.setText("剩余时间:"+countdownTime/60+"分钟"+countdownTime%60+"秒");
		int hours = countTime /3600;
		int minutes = (countTime % 3600)/60;
		int remainingSeconds = countTime % 60;
		uptimeLabel.setText(String.format("%02d:%2d:%2d", hours,minutes,remainingSeconds));
	}
	
	
	private static void showDialog(JFrame parent){
		JDialog jDialog = new JDialog(parent,"确认对话框",true);
		jDialog.setSize(200,100);
		
		JButton okButton = new JButton("确认");
		okButton.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				if (e.getSource() == okButton) {
					countdownTime = 60*60  ;
					countTime = 0;
					timeLabel.setText("剩余时间:"+countdownTime/60+"分钟"+countdownTime%60+"秒");
					uptimeLabel.setText("00:00:00");
				}
				jDialog.dispose();
			}
		});
		
		JPanel panel = new JPanel();
		panel.add(okButton);
		jDialog.getContentPane().add(panel,BorderLayout.CENTER);
		
		//获取屏幕尺寸和对话框尺寸,计算居中位置
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		int x = (screenSize.width - jDialog.getWidth()) /2 ;
		int y = (screenSize.height - jDialog.getHeight()) / 2;
		//设置对话框位置
		jDialog.setLocation(x,y);
		
		//设置对话框始终位于顶部
		jDialog.setAlwaysOnTop(true);
		//设置对话框为模态对话框
		jDialog.setModal(true);
		
		
		jDialog.setVisible(true);
	}
}

编译运行

打开dos命令窗口进入当前文件夹,执行以下命令(用开发工具导出jar包更便捷,下述命令方式只为记录.)

1. 编译

javac -encoding UTF-8 AlarmClock.java

2. 生成jar文件

jar cvfe MyClock.jar AlarmClock *.class

3. 运行

java -jar MyClock.jar
为便于使用,可直接写bat处理文本.
新建一个MyClock.bat的文件,文件内容为
START java.exe -jar MyClock.jar
将该bat文件发送到桌面快捷方式,每次双击该bat程序即可.

遇到问题记录

1. 编译报错

错误:找不到或无法加载主类
解决:编写代码在开发软件中,没有定义包,但有默认src路径,在类文件当前路径编译运行报错.将文件包引入删除即可.

2. jar文件执行错误

错误:直接在eclipse中导出jar包,运行java -jar命令报错"jar中没有主清单属性"
解决:导出jar包选项错误.eclipse-export-java有三个选项.jar file,javadoc,runnable jar file.需要选择runnable jar file进行导出.

标签:桌面,java,jar,60,闹钟,new,import,jDialog
From: https://www.cnblogs.com/vinphy/p/17947184

相关文章

  • Java 涉密信息截取字符替换为‘*‘号
    @TestpublicvoidtestAddition(){encrypt("111111111111111111",6,4);//该身份证号码为测试,并不实际存在//电话号码测试encrypt("18888888888",3,2);//该电话号码为测试,并不实际存在}/***@paramfront需要显示前几......
  • 使用Java移动文件
    一、使用JavaIO包的File类移动文件JavaIO包的File类提供了renameTo()方法,该方法可以用来移动文件。该方法的参数为一个File对象,代表目标文件的完整路径和文件名。示例代码:FilesourceFile=newFile("sourceFilePath");FiledestFile=newFile("destinationFilePath");if(so......
  • JAVA-EE使用谷歌的ZXing实现生成带LOGO的QR Code------JAVA-EE
    packagecom.powernode.qrcode.servlet;importcom.google.zxing.BarcodeFormat;importcom.google.zxing.EncodeHintType;importcom.google.zxing.MultiFormatWriter;importcom.google.zxing.common.BitMatrix;importcom.google.zxing.qrcode.decoder.ErrorCorrect......
  • Apache Commons BCEL与Java字节码操作
    第1章:ApacheCommonsBCEL简介大家好,我是小黑,咱们今天来聊聊ApacheCommonsBCEL(ByteCodeEngineeringLibrary)。你可能会问,BCEL是什么鬼?别急,小黑这就给你娓娓道来。BCEL,它是一款专门用来操作Java字节码的库。想象一下,Java代码编译后变成了字节码,这些字节码是Java虚拟机执行的......
  • java基础语法API之GUI和时间类综合练习
    一:概述在这里将以两个小案例,去再次说明一个GUI和时间类的应用。二:具体案例<1>案例1:员工出勤查询在这里面需要最先写入一个DateChooser类,练习的时候可以直接复制这个代码,这个代码比较复杂。这个类是第一个代码块/*日期选择器,可以选择日期的显示格式*/importjavax.swing.*;imp......
  • Java之字符流的详细解析
     3.字符流当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。3.1字符输入流【Reader】java.io.Reader抽象类是表示用于......
  • Java项目管理工具 - Maven的使用
    Maven介绍什么是MavenMaven的正确发音是[ˈmevən],而不是“马瘟”以及其他什么瘟。Maven在美国是一个口语化的词语,代表专家、内行的意思。一个对Maven比较正式的定义是这么说的:Maven是一个项目管理工具,它包含了一个项目对象模型(POM:ProjectObjectModel),一组标准集合,一个......
  • 关于JavaScript的技巧一
    1.滚动到页面顶部我们可以使用window.scrollTo()平滑滚动到页面顶部。constscrollToTop=()=>{window.scrollTo({top:0,left:0,behavior:"smooth"});};2.滚动到页面底部当然,如果知道文档的高度,也可以平滑滚动到页面底部。constscrollToBottom=()=>{wind......
  • 深入分析 Java、Kotlin、Go 的线程和协程
    文章目录前言协程是什么协程的好处进程进程是什么进程组成进程特征线程线程是什么线程组成任务调度进程与线程的区别线程的实现模型一对一模型多对一模型多对多模型线程的“并发”协程协程的目的协程的特点协程的原理Java、Kotlin、Go的线程与协程Kotlin的协程使用「线程」的代......
  • Java之IO流概述
     1.1什么是IO生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrl+s,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。我们把这种数据的传输,可以看做是一种数据的流动......