/**
* author zjsrustar
*/
//package MainPackage;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
* This is the main Function of the program.
*/
public class Clock{
public static void main(String []args){
ClockFrame frame = new ClockFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
/**
* This class is used to define the main frame of the clock
*/
class ClockFrame extends JFrame{
//constructor function
public ClockFrame(){
setTitle("小时钟");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
setLocation(DEFAULT_LOC_WIDTH, DEFAULT_LOC_HEIGHT);
ClockPanel panel = new ClockPanel();
add(panel);
}
//variables of the frame
private int DEFAULT_LOC_WIDTH = 300;
private int DEFAULT_LOC_HEIGHT = 300;
private int DEFAULT_WIDTH = 330;
private int DEFAULT_HEIGHT = 330;
}
/**
* This class is used to defind the main panel of the clock
*/
class ClockPanel extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
//get the time of the system
GregorianCalendar calendar = new GregorianCalendar();
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
//draw the clock face
Ellipse2D clockFace = new Ellipse2D.Double();
clockFace.setFrameFromCenter(CENTER_X, CENTER_Y, CENTER_X+RADIUS, CENTER_Y+RADIUS);
g2.setColor(Color.BLUE);
g2.draw(clockFace);
//draw the clock center
Ellipse2D clockCenter = new Ellipse2D.Double();
clockCenter.setFrameFromCenter(CENTER_X, CENTER_Y, CENTER_X+INNER_RADIUS, CENTER_Y+INNER_RADIUS);
g2.setColor(Color.RED);
g2.fill(clockCenter);
//help to get the exact position of the lines
double lenX, lenY, posX, posY;
//draw the clock second line
Line2D clockSecond = new Line2D.Double();
double secondTime = (double) calendar.get(Calendar.SECOND);
lenX = SECOND_LEN*Math.sin(2*Math.PI*secondTime/60.0);
lenY = SECOND_LEN*Math.cos(2*Math.PI*secondTime/60.0);
posX = CENTER_X + lenX;
posY = CENTER_Y - lenY;
clockSecond.setLine(CENTER_X, CENTER_Y, posX, posY);
g2.setColor(Color.PINK);
g2.draw(clockSecond);
//draw the clock minute line
Line2D clockMinute = new Line2D.Double();
double minuteTime = (double) calendar.get(Calendar.MINUTE);
lenX = MINUTE_LEN*Math.sin(2*Math.PI*(secondTime+60*minuteTime)/3600.0);
lenY = MINUTE_LEN*Math.cos(2*Math.PI*(secondTime+60*minuteTime)/3600.0);
posX = CENTER_X + lenX;
posY = CENTER_Y - lenY;
clockMinute.setLine(CENTER_X, CENTER_Y, posX, posY);
g2.setColor(Color.GREEN);
g2.draw(clockMinute);
//draw the clock hour line
Line2D clockHour = new Line2D.Double();
double hourTime = (double) calendar.get(Calendar.HOUR);
lenX = HOUR_LEN*Math.sin(2*Math.PI*((secondTime+60*minuteTime+3600*hourTime)/43200.0));
lenY = HOUR_LEN*Math.cos(2*Math.PI*((secondTime+60*minuteTime+3600*hourTime)/43200.0));
posX = CENTER_X + lenX;
posY = CENTER_Y - lenY;
clockHour.setLine(CENTER_X, CENTER_Y, posX, posY);
g2.setColor(Color.BLUE);
g2.draw(clockHour);
int delay = 1000;
// actionListener
ActionListener drawClock;
drawClock=new ActionListener(){
public void actionPerformed(ActionEvent evt){
repaint();
}
};
//create timer
new Timer(delay, drawClock).start();
}
//variables of the panel
private int HOUR_LEN = 50;
private int MINUTE_LEN = 70;
private int SECOND_LEN = 90;
private int RADIUS = 100;
private int INNER_RADIUS = 2;
private int CENTER_X = 150;
private int CENTER_Y = 150;
}
- 大小: 18.6 KB
分享到:
相关推荐
"带语音报时的乐泉小时钟"是一款集实用与趣味于一体的桌面小工具,它以其独特的设计和丰富的功能为用户提供了高效且个性化的时钟体验。这款小时钟不仅能够准确地显示时间,还具备多种实用特性,如语音报时、定时提醒...
本示例项目“Windows编程双缓存绘画小时钟”就是一个运用这种技术创建的简易小时钟应用程序。下面我们将深入探讨双缓存绘画的基本原理以及它在实现小时钟程序中的应用。 首先,我们要理解什么是双缓存绘画。在...
超逗的动态小人时钟,找了很久
在本文中,我们将深入探讨如何使用Windows Presentation Foundation (WPF) 创建一个仿Web QQ的小时钟源码。WPF是Microsoft开发的一种强大的用户界面框架,它允许开发者构建丰富的、交互式的桌面应用程序。在这个项目...
本项目实例“小时钟”就是一个基于微信小程序开发的实用工具,它旨在帮助用户跟踪和管理他们的工作与休息时间。 首先,我们来深入了解一下微信小程序的基础知识。微信小程序采用一套自有的开发语言WXML(WeiXin ...
时钟 flash swf swf格式的时钟 flash小时钟
在LABVIEW中创建一个可爱的小时钟,首先要理解LABVIEW的时间和日期函数。这些函数允许开发者获取当前时间、设置时间、以及进行时间间隔的计算。例如,可以使用"系统时间"函数来获取计算机的当前时间,并将其显示在一...
1. **创建JWindow实例**:首先,我们需要创建一个JWindow对象,作为小时钟的基础框架。我们可以自定义窗口的大小和位置,以适应桌面环境。 2. **添加时钟组件**:在JWindow内,我们需要一个显示时间的组件。通常,...
在这个名为"小时钟_时钟_java"的项目中,我们可以看到作者利用Java的核心特性构建了一个模拟时钟的功能。 首先,让我们了解Java中的面向对象编程(OOP)概念。OOP是一种编程范式,它将程序设计为一系列相互协作的...
标题中的“C#.NET图片开发小时钟”指的是使用C#编程语言和.NET Framework进行开发的一种特殊类型的时钟应用,该应用可能将时间显示在图片上或者以图片的形式展示时间。这个项目可能是为初学者或爱好者设计的,让他们...
【标题】:“总在最前的小时钟” 这个项目标题揭示了一个特定的软件应用——一个设计成始终位于屏幕顶部的时钟程序。这样的时钟在全屏运行游戏或其他应用程序时非常有用,因为它允许用户在不退出当前界面的情况下...
java小时钟 可走可暂停
本资源主要讲述了Android开发实例之小人时钟的开发过程,从安装开发环境到具体的实现细节。文章首先介绍了作者的开发背景和动机,然后详细描述了开发环境的安装和设置,接着对小人时钟的界面设计和实现进行了详细的...
在本项目中,“课堂MFC小时钟”是一个教学示例,用于教授如何使用Microsoft Foundation Classes (MFC) 创建一个简单的时钟应用。MFC是微软为Windows开发应用程序提供的一组C++类库,它简化了Windows API的使用,使得...
本资源集合是"超炫酷的200个Flash小时钟",它包含了多种独特设计和创意的Flash时钟作品,非常适合那些对Flash动画制作感兴趣或希望提升网页设计技能的学习者。 首先,让我们了解一下Flash的基本概念。Flash是由...
标题中的“一款漂亮的小时钟,有钟铃声,可以更换背景,调整不同时区的时间”表明这是一款功能丰富的数字时钟应用或者桌面小部件。它不仅具有基本的时间显示功能,还具备了一些额外的特性,使得它更加实用和个性化。...
标题中的“小时钟.rar”可能是指一个压缩文件,其中包含了有关小时钟或者是一个小时钟应用的源代码、设计图纸、用户手册等相关资料。由于没有具体的标签信息,我们只能基于文件名来推测其内容。 小时钟,顾名思义,...
这个实验——“JAVA线程程序设计(小时钟)”的目标是让学生深入理解Java线程的概念,特别是线程调度和线程同步,并通过创建一个动态的指针式时钟来实践这些概念。 实验内容要求设计和编写一个时钟程序,该程序使用...
【CSS+JS 小时钟】是一个简单的网页应用,它利用了HTML、CSS和JavaScript这三种核心技术来模拟一个可实时显示时间的小时钟。这个项目是开发者为了学习和实践这三门语言的基础知识而创建的,尽管代码量不大,但却能...