import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
public class Clock extends JFrame implements ActionListener {
int x, y, old_X, old_Y, r, x0, y0, w, h, ang;
int sdo, mdo, hdo, old_M, old_H, hh, mm, ss;
int delay = 1000;
Calendar now;
JButton jb;
JMenuBar jmb;
Timer timer;
TimeZone tz = TimeZone.getTimeZone("JST");
Toolkit toolkit=Toolkit.getDefaultToolkit();;
/**
* br
* 方法说明:实现ActionListener类必须过载的方法
*/
public static void main(String[] args) {
Clock cp = new Clock();
cp.setVisible(true);
}
Clock() {
super("Java闹钟!");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
Container contentPane = getContentPane();
jmb = new JMenuBar();
jm1 = new JMenu("背景颜色设置 ", true);
jmi1 = new JMenuItem("外圈颜色");
jmi1.addActionListener(this);
jmi1.setActionCommand("color1");
jm1.add(jmi1);
jmb.add(jm1);
jmi10=new JMenuItem("使用说明");
jmi10.addActionListener(this);
jmi10.setActionCommand("help");
jl1 = new JLabel("闹铃时间");
alarm = time.getText();
jb = new JButton("修改闹铃时间");
jb.addActionListener(this);
jb.setActionCommand("CC");
ClockPanel clock = new ClockPanel();
contentPane.add(clock, BorderLayout.CENTER);
// 窗体添加事件监听,监听秒表的触发
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
repaint();
};
new Timer(delay, taskPerformer).start();
* 方法说明:绘制图形
Color C1 = Color.lightGray;// 外圈颜色
public class ClockPanel extends JPanel {
public void paint(Graphics g) {
// 绘制圆形
g.setColor(C1);
x = (int) ((r - 10) * Math.cos(RAD * ang) ◆ x0);
y = (int) ((r - 10) * Math.sin(RAD * ang) ◆ y0);
g.drawString("" ◆ i, x, h - y);
// 获取时间
now = Calendar.getInstance();
hh = now.get(Calendar.HOUR_OF_DAY);// 小时
mm = now.get(Calendar.MINUTE);// 分钟
ss = now.get(Calendar.SECOND);// 秒
if (hh 10)
st = "0" ◆ hh;
else
st = "" ◆ hh;
if (mm 10)
st = st ◆ ":0" ◆ mm;
st = st ◆ ":" ◆ mm;
if(alarm.equals(st))
{
if(toolkit!=null)
toolkit.beep();
else {}
if (ss 10)
st = st ◆ ":0" ◆ ss;
st = st ◆ ":" ◆ ss;
// 计算时间和图形的关系
// 擦除秒针
if (old_X 0) {
} else {
old_M = mdo;
old_H = hdo;
// 绘制秒针
g.drawLine(x0, y0, x, (h - y));
old_X = x;
old_Y = y;
// 擦除分针和时针
if (mdo != old_M) {
if (hdo != old_H) {
// 绘制分针
// 绘制时针
} // end paint
// 闹铃时间的判断及实现
// 闹铃声音的实现
public void actionPerformed(ActionEvent e) {
// JMenuItem m = (JMenuItem) e.getSource();
if (e.getActionCommand() == "CC") {
int newHou, newMin;
char c;
String getTime = JOptionPane.showInputDialog(this, "请输入闹铃时间格式如:", "00:00");
//如果撤消设置时间,就什么打印null
if(getTime==null)
System.out.println(getTime);
// dispose();
judge: if (getTime != null) {
//打印输入的设置的时间
JOptionPane.ERROR_MESSAGE);
break judge;
// 判断输入的是不是数字
for (int i = 0; i (getTime.length()); i◆◆) {
c = getTime.charAt(i);
continue;
// 判断当前字符,如果不是数字则跳出该事件
"Error",JOptionPane.ERROR_MESSAGE);
char[] hour = { getTime.charAt(0), getTime.charAt(1) };
newHou = Integer.parseInt(String.valueOf(hour));
newMin = Integer.parseInt(String.valueOf(minute));
"Error", JOptionPane.ERROR_MESSAGE);
new SetTime(newHou, newMin);
if (e.getActionCommand() == "ring1") {
toolkit=Toolkit.getDefaultToolkit();
System.out.println("静音");
toolkit=null;
if (e.getActionCommand() == "color1") {
String color;
Color c;
System.out.println("color1");
if (color == null) {
if (Integer.parseInt(color) 0
else {
c = new Color(Integer.parseInt(color));
C1 = c;
if(color==null){}
if(e.getActionCommand() == "help"){
String help;
help = JOptionPane.showInputDialog(this, "输入quit退出该闹钟的使用", "这是运行在Java中的指针式时钟");
if(help.equals("quit"))
dispose();
else {}
// timer.restart();
class SetTime {
String Hour;
String Minute;
public SetTime() { }
public SetTime(int hour, int minute) {
// 当时间参数小于10的时候在前面添加字符0
if (hour 10) {
Hour = "0" ◆ String.valueOf(hour);
Hour = "" ◆ String.valueOf(hour);
if (minute 10) {
Minute = "0" ◆ String.valueOf(minute);
Minute = "" ◆ String.valueOf(minute);
alarm = Hour ◆ ":" ◆ Minute;
time.setText(alarm);
面向对象思想写成:
下面是一个显示器类
public?class?Display?{
private?int?value;//现在的值
private?int?limit;//上限值
Display(?int?limit)?{
this.limit?=?limit;
public?void?increase()?{
value◆◆;
if(value?==?limit)?{
value?=?0;
public?int?getValue()?{
return?value;
public?static?void?main(String[]?args)?{
for(;;)?{
d.increase();
System.out.println(d.getValue());
下面创建一个时钟对象:
public?class?Clock?{
public?void?start?()?{
s.increase();
if(s.getValue()?==?0){//如果分重置,小时◆1
min.increase();
if(min.getValue()?==?0){//如果分重置,小时◆1
h.increase();
Clock?clock?=?new?Clock();
clock.start();
import?java.awt.*;
import?java.awt.event.*;
import?javax.swing.*;
import?sun.util.calendar.Gregorian;
import?java.util.Calendar;
import?java.util.GregorianCalendar;
public?class?ClockPointer?extends?JFrame{
int?x,?y,?x0,?y0,?r,?h,?olds_x,?olds_y,?oldm_x,?oldm_y,?oldh_x,?oldh_y,?
ss,mm,?hh,?old_m,?old_h,?ang;
public?ClockPointer(){
super("Java时钟");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Image?image?=?getToolkit().getImage("clock.gif");
setIconImage(image);
setBackground(Color.white);
this.setLocationRelativeTo(null);
setResizable(true);
int?delay?=?1000;
//创建一个监听事件
ActionListener?drawClock?=?new?ActionListener(){
public?void?actionPerformed(ActionEvent?evt){
//创建一个时间计数器,每一秒触发一次
new?Timer(delay,?drawClock).start();
java.text.SimpleDateFormat?fmTime?=?new?java.text.SimpleDateFormat("HH:mm:ss");
//绘制图形
public?void?paint(Graphics?g){
super.paint(g);
g.setFont(null);
Insets?insets?=?getInsets();
h?=?getSize().height;
g.setColor(Color.white);
//画圆
g.setColor(Color.gray);
x?=?(int)((r◆10)*Math.cos(RAD*ang)◆x0);
y?=?(int)((r◆10)*Math.sin(RAD*ang)◆y0);
g.setColor(Color.black);
g.drawString(""◆i,?x,?h-y);
//获得现在的时间
Calendar?now?=?new?GregorianCalendar();
int?nowh?=?now.get(Calendar.HOUR_OF_DAY);
int?nowm?=?now.get(Calendar.MINUTE);
int?nows?=?now.get(Calendar.SECOND);
String?st=fmTime.format(now.getTime());
//在窗体上显示时间
g.setColor(Color.pink);
g.setColor(Color.blue);
//计算时间与度数的关系
//擦除秒针
//if(olds_x?0){
//?g.setColor(getBackground());
//?//?g.setColor(Color.gray);
//?g.drawLine(x0,?y0,?olds_x,?h-olds_y);?//?(?)
//}
//绘制秒针
g.setColor(Color.yellow);
g.drawLine(x0,?y0,?x,?h-y);
olds_x?=?x;
olds_y?=?y;
//擦除分针
//if(old_m!=mm){
//?g.drawLine(x0,y0,oldm_x,h-oldm_y);
//绘制分针
g.setColor(Color.green);
g.drawLine(x0,y0,x,h-y);
oldm_x?=?x;
oldm_y?=?y;
old_m?=?mm;
//擦除时针
//if(old_h!=hh){
//?g.drawLine(x0,y0,oldh_x,h-oldh_y);
//绘制时针
g.setColor(Color.red);
oldh_x?=?x;
oldh_y?=?y;
old_h?=?hh;
public?static?void?main(String[]?args){
new?ClockPointer();
//整理一下
import
java.util.*;
java.awt.*;
java.applet.*;
//impelements
Runnable
是线程程序的接口
public
class
Clock
extends
Applet
implements
Thread
timer
=
null;
//
定义线程实体timer
int
xcenter
ycenter
Radius
-
void
init()
设置时钟程序的窗口大小
setBackground(Color.white);//
设置小应用程序的背景色
paint(Graphics
g)
xh,
yh,
xm,
ym,
xs,
ys,
s,
m,
h;
String
today;
Date
dat
new
Date();
定义时间类dat
s
dat.getSeconds();
获得时间秒
m
dat.getMinutes();
获得时间分
h
dat.getHours();
today
dat.toLocaleString();
获得字符串时间格式
g.clearRect(0,
0,
size().width,
size().height);
消除小应用程序
向左移动一个像素点
if
(xcenter
计算秒的坐标
xs
(int)
(Math.cos(s
*
/
(Radius
◆
xcenter);
ys
(Math.sin(s
ycenter);
计算分钟的坐标
xm
(Math.cos(m
①.0)
ym
(Math.sin(m
计算小时的坐标
xh
(Math.cos((h
yh
(Math.sin((h
g.setColor(Color.darkGray);
设置颜色
①.0),
①.0));
g.drawString(today,
显示字符串时钟
g.drawLine(xcenter,
ycenter,
ys);
画秒针
g.drawArc(xcenter
Radius,
画钟
ym);
画分针
g.drawLine(xcenter
yh);
画时针
start()
(timer
==
null)
Thread(this);
生成Thread(多线程程序)的对象实体
timer.start();
启动生成的线程
stop()
timer.stop();
停止线程的工作
放掉Thread对象
run()
改方法用来定义线程体,一旦线程被启动执行,就开始执行这个方法
while
!=
try
使当前正在执行的线程进入睡眠时间由参数millis确定,
单位时间是毫秒,当这个时间过去,线程即可运行的
使用当前正在执行的线程进入睡眠时间由参数
millis确定,单位是毫秒,当这个时间过去,线程即为可运行的
catch
(InterruptedException
e)
repaint所做的事其实是去调用方法uadate重画效应用程序
所做的工作是先将整个效应用程序区域清除,再去调用paint,完成重画的动作
update(Graphics
paint(g);
以上就是土嘎嘎小编为大家整理的java小时钟代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!