成都创新互联网站制作重庆分公司

一个闹钟的java代码 一个闹钟的java代码怎么写

寻找java编程高手写一个闹钟的程序

自己之前做过的一个:

网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、小程序设计、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了疏勒免费建站欢迎大家使用!

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import javax.swing.*;

import javax.swing.Timer;

public class Clock extends JFrame implements ActionListener {

public final int HEIGTH = 200, L0 = 50, T0 = 50,N=8;

public final double RAD = Math.PI / 180.0;

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;

String st, alarm, Items1, Items2,str[];

JButton jb;

JComboBox jc1, jc2, jc3;

JLabel jl1, jl2, jl3, jl4;

JMenu jm1, jm2, jm3, jm4;

JMenuBar jmb;

JMenuItem jmi1, jmi2, jmi3, jmi4, jmi5, jmi6, jmi7, jmi8, jmi9,jmi10;

JTextField jtf1, jtf2, time;

JPanel jp1, jp2, jp3;

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);

setSize(550, 700);

setVisible(true);

Container contentPane = getContentPane();

jp2 = new JPanel();

jmb = new JMenuBar();

jm1 = new JMenu("背景颜色设置 ", true);

jmi1 = new JMenuItem("外圈颜色");

jmi1.addActionListener(this);

jmi1.setActionCommand("color1");

jm1.add(jmi1);

jmi2 = new JMenuItem("闹钟边线颜色");

jmi2.addActionListener(this);

jmi2.setActionCommand("color2");

jm1.add(jmi2);

jmi3=new JMenuItem("底盘颜色");

jmi3.addActionListener(this);

jmi3.setActionCommand("color3");

jm1.add(jmi3);

jmi4=new JMenuItem("系统时间背静颜色");

jmi4.addActionListener(this);

jmi4.setActionCommand("color4");

jm1.add(jmi4);

jmb.add(jm1);

jm2 = new JMenu("指针颜色设置 ", true);

jmi5 = new JMenuItem("秒针颜色");

jmi5.addActionListener(this);

jmi5.setActionCommand("color5");

jm2.add(jmi5);

jmi6 = new JMenuItem("分针颜色");

jmi6.addActionListener(this);

jmi6.setActionCommand("color6");

jm2.add(jmi6);

jmi7 = new JMenuItem("时针颜色");

jmi7.addActionListener(this);

jmi7.setActionCommand("color7");

jm2.add(jmi7);

jmb.add(jm2);

jm3 = new JMenu("闹铃声音设置 ", true);

jmi8 = new JMenuItem("响铃1");

jmi8.addActionListener(this);

jmi8.setActionCommand("ring1");

jm3.add(jmi8);

jmi9 = new JMenuItem("静音");

jmi9.addActionListener(this);

jmi9.setActionCommand("ring2");

jm3.add(jmi9);

jmb.add(jm3);

jm4 = new JMenu("帮助 ", true);

jmi10=new JMenuItem("使用说明");

jmi10.addActionListener(this);

jmi10.setActionCommand("help");

jm4.add(jmi10);

jmb.add(jm4);

jp2.add(jmb);

contentPane.add(jp2, BorderLayout.NORTH);

jp3 = new JPanel();

jl1 = new JLabel("闹铃时间");

jl1.setFont(new Font("楷体_GB2312", Font.BOLD, 18));

time = new JTextField("00:00", 5);

alarm = time.getText();

jb = new JButton("修改闹铃时间");

jb.addActionListener(this);

jb.setActionCommand("CC");

jp3.add(jl1);

jp3.add(time);

jp3.add(jb);

contentPane.add(jp3, BorderLayout.SOUTH);

ClockPanel clock = new ClockPanel();

contentPane.add(clock, BorderLayout.CENTER);

// 窗体添加事件监听,监听秒表的触发

ActionListener taskPerformer = new ActionListener() {

public void actionPerformed(ActionEvent evt) {

repaint();

}

};

new Timer(delay, taskPerformer).start();

}

/**

* br

* 方法说明:绘制图形

*/

Color C1 = Color.lightGray;// 外圈颜色

Color C2 = Color.black;// 边线颜色

Color C3 = Color.magenta;// 内盘颜色

Color C4 = Color.blue;// 背景颜色

Color C5 = Color.yellow;// 秒针颜色

Color C6 = Color.green;// 分针颜色

Color C7 = Color.red;//时针颜色

public class ClockPanel extends JPanel {

public void paint(Graphics g) {

h = getSize().height - 200;

// 绘制圆形

g.setColor(C1);

g.fillOval(L0 + 30, T0 + 30, h - 60, h - 60);

g.setColor(C2);

g.drawOval(L0 + 31, T0 + 31, h - 62, h - 62);

g.setColor(C3);

g.fillOval(L0 + 50, T0 + 50, h - 100, h - 100);

g.setColor(C2);

g.drawOval(L0 + 51, T0 + 51, h - 102, h - 102);

r = h / 2 - 30;

x0 = 30 + r - 5 + L0;

y0 = 30 + r - 5 - T0;

ang = 60;

for (int i = 1; i = 12; i++) {

x = (int) ((r - 10) * Math.cos(RAD * ang) + x0);

y = (int) ((r - 10) * Math.sin(RAD * ang) + y0);

g.drawString("" + i, x, h - y);

ang -= 30;

}

x0 = 30 + r + L0;

y0 = 30 + r + T0;

g.drawString("指针式时钟", 215, 200);

// 获取时间

now = Calendar.getInstance();

hh = now.get(Calendar.HOUR_OF_DAY);// 小时

mm = now.get(Calendar.MINUTE);// 分钟

ss = now.get(Calendar.SECOND);// 秒

g.setColor(C4);

g.fillRect(5, 550, 150, 30);// 填充的矩形

g.setColor(C6);

if (hh 10)

st = "0" + hh;

else

st = "" + hh;

if (mm 10)

st = st + ":0" + mm;

else

st = st + ":" + mm;

if(alarm.equals(st))

{

if(toolkit!=null)

toolkit.beep();

else {}

}

if (ss 10)

st = st + ":0" + ss;

else

st = st + ":" + ss;

{

g.setFont(new Font("华文楷体", Font.BOLD, 16));

g.drawString("系统时间:" + st, 10, 570);

}

// 计算时间和图形的关系

sdo = 90 - ss * 6;

mdo = 90 - mm * 6;

hdo = 90 - hh * 30 - mm / 2;

// 擦除秒针

if (old_X 0) {

g.setColor(C3);

} else {

old_M = mdo;

old_H = hdo;

}

// 绘制秒针

g.setColor(C5);

x = (int) ((r - 26) * Math.cos(RAD * sdo) + x0);

y = (int) ((r - 26) * Math.sin(RAD * sdo) + y0) - 2 * T0;

g.drawLine(x0, y0, x, (h - y));

old_X = x;

old_Y = y;

// 擦除分针和时针

if (mdo != old_M) {

g.setColor(C3);

old_M = mdo;

}

if (hdo != old_H) {

g.setColor(C3);

old_H = hdo;

}

// 绘制分针

g.setColor(C6);

x = (int) ((r - 50) * Math.cos(RAD * mdo) + x0);

y = (int) ((r - 50) * Math.sin(RAD * mdo) + y0) - 2 * T0;

g.drawLine(x0, y0, x, (h - y));

// 绘制时针

g.setColor(C7);

x = (int) ((r - 90) * Math.cos(RAD * hdo) + x0);

y = (int) ((r - 90) * Math.sin(RAD * hdo) + y0) - 2 * T0;

g.drawLine(x0, y0, x, (h - y));

} // 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");

repaint();

//如果撤消设置时间,就什么打印null

if(getTime==null)

System.out.println(getTime);

// dispose();

judge: if (getTime != null) {

//打印输入的设置的时间

System.out.println(getTime);

// 判断输入的是不是5位字符

if (getTime.length() != 5) {

JOptionPane.showMessageDialog(time, "格式错误\n请按格式输入5位数字", "Error",

JOptionPane.ERROR_MESSAGE);

repaint();

break judge;

}

// 判断输入的是不是数字

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

c = getTime.charAt(i);

if (i == 2 !Character.isDigit(c))

continue;

// 判断当前字符,如果不是数字则跳出该事件

if (i != 2 !Character.isDigit(c)) {

JOptionPane.showMessageDialog(this, "格式错误\n请按格式输入5位数字",

"Error",JOptionPane.ERROR_MESSAGE);

repaint();

break judge;

}

}

char[] hour = { getTime.charAt(0), getTime.charAt(1) };

char[] minute = { getTime.charAt(3), getTime.charAt(4) };

newHou = Integer.parseInt(String.valueOf(hour));

newMin = Integer.parseInt(String.valueOf(minute));

if (newHou = 24 || newHou 0) {

JOptionPane.showMessageDialog(this, "格式错误\n小时应该是不小于0不大于23的正数",

"Error", JOptionPane.ERROR_MESSAGE);

repaint();

break judge;

}

if (newMin = 60 || newHou 0) {

JOptionPane.showMessageDialog(this, "格式错误\n分钟应该是小于60的正数", "Error",

JOptionPane.ERROR_MESSAGE);

repaint();

break judge;

}

new SetTime(newHou, newMin);

}

}

if (e.getActionCommand() == "ring1") {

toolkit=Toolkit.getDefaultToolkit();

}

if(e.getActionCommand() == "ring2"){

System.out.println("静音");

toolkit=null;

}

if (e.getActionCommand() == "color1") {

String color;

Color c;

System.out.println("color1");

color = JOptionPane.showInputDialog(this, "请输入喜欢的外圈颜色(0--255)", "128");

if (color == null) {

} else {

if (Integer.parseInt(color) 0

|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的外圈颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C1 = c;

}

}

}

if(e.getActionCommand() == "color2"){

String color;

Color c;

System.out.println("color2");

color = JOptionPane.showInputDialog(this, "请输入喜欢的边线颜色(0--255)", "128");

if(color==null){}

else{if (Integer.parseInt(color) 0|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的边线颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C2 = c;

}

}

}

if(e.getActionCommand() == "color3"){

String color;

Color c;

System.out.println("color3");

color = JOptionPane.showInputDialog(this, "请输入喜欢的内盘颜色(0--255)", "128");

if(color==null){}

else{if (Integer.parseInt(color) 0|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的内盘颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C3 = c;

}

}

}

if(e.getActionCommand() == "color4"){

String color;

Color c;

System.out.println("color4");

color = JOptionPane.showInputDialog(this, "请输入喜欢的背景颜色(0--255)", "128");

if(color==null){}

else{if (Integer.parseInt(color) 0|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的背景颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C4 = c;

}

}

}

if(e.getActionCommand() == "color5"){

String color;

Color c;

System.out.println("color5");

color = JOptionPane.showInputDialog(this, "请输入喜欢的秒针颜色(0--255)", "128");

if(color==null){}

else{if (Integer.parseInt(color) 0|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的秒针颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C5 = c;

}

}

}

if(e.getActionCommand() == "color6"){

String color;

Color c;

System.out.println("color6");

color = JOptionPane.showInputDialog(this, "请输入喜欢的分针颜色(0--255)", "128");

if(color==null){}

else{if (Integer.parseInt(color) 0|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的分针颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C6 = c;

}

}

}

if(e.getActionCommand() == "color7"){

String color;

Color c;

System.out.println("color7");

color = JOptionPane.showInputDialog(this, "请输入喜欢的时针颜色(0--255)", "128");

if(color==null){}

else{if (Integer.parseInt(color) 0|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的时针颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C7 = c;

}

}

}

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);

} else {

Hour = "" + String.valueOf(hour);

}

if (minute 10) {

Minute = "0" + String.valueOf(minute);

} else {

Minute = "" + String.valueOf(minute);

}

alarm = Hour + ":" + Minute;

time.setText(alarm);

repaint();

}

}

}

求java闹钟程序源代码

import java.util.*;

import java.awt.*;

import java.applet.*;

import java.text.*;

import java.awt.event.*;

public class Alarm extends Applet implements Runnable

{

Thread timer=null; //创建线程timer

Image gif1; //clockp:闹钟的外壳,闹铃和报时物

boolean setflag=false,stopflag=false,cancelflag=false;

Panel setpanel;

//获取声音文件

AudioClip ring=getAudioClip(getCodeBase(), "1.mid");

Button setbutton=new Button("SET");

Button cancelbutton=new Button("CANCEL");

Button stopbutton=new Button("STOP");

//响应按钮事件

private ActionListener setli=new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

setflag=true;

}

};

private ActionListener cancelli=new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

setflag=true;

}

};

private ActionListener stopli=new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

ring.stop();

//清除的方法

//g.clearRect(83,280,20,30);

}

};

Label note1=new Label("Alarm clock:");

//GregorianCalendar提供的是一个日历式的东东,上面又多了很多的参数,是方便操作了不少。而Date类的功能远不及其,求个和日期有联系的还要自己计算。

GregorianCalendar cal=new GregorianCalendar();

GregorianCalendar cal2=new GregorianCalendar();

SimpleDateFormat df=new SimpleDateFormat("yyyy MM dd HH:mm:ss");//设置时间格式

Date dummy=new Date(); //生成Data对象

String lastdate=df.format(dummy);

Font F=new Font("TimesRoman",Font.PLAIN,14);//设置字体格式

Date dat=null;

Date timeNow;

Color fgcol=Color.blue;

Color fgcol2=Color.darkGray;

Color backcolor=Color.blue;

Label hlabel2,mlabel2,slabel2;//显示时间单位时所用的标签(时、分、秒)

int i;

int s,m,h;

TextField sethour,setmin,setsec;//显示当前时间文本框和定时文本框

//在Applet程序中,首先自动调用初始化完成必要的初始化工作,紧接着自动调用start,在进入执行程序和返回到该页面时被调用,而从该页面转到别的页面时,stop被调用,关闭浏览器时,执行destroy。

public void init()//初始化方法

{

int fieldx=50,fieldy1=120,fieldy2=220,fieldw=30,fieldh=20,space=50;//显示时间和定时文本框的定位参数

setLayout(null); //将布局管理器初始化为null

setpanel=new Panel();

setpanel.setLayout(null);

setpanel.add(note1);

note1.setBounds(30,100,60,20);

note1.setBackground(backcolor);

note1.setForeground(Color.black);

//定时用的文本框(时、分、秒)

sethour=new TextField("00",5);

setmin=new TextField("00",5);

setsec=new TextField("00",5);

hlabel2=new Label();

mlabel2=new Label();

slabel2=new Label();

//定时的小时文本框的位置、大小

setpanel.add(sethour);

sethour.setBounds(fieldx,fieldy2,fieldw,fieldh);

sethour.setBackground(Color.white);

//在文本框后加入单位“时”

setpanel.add(hlabel2);

hlabel2.setText("h");

hlabel2.setBackground(backcolor);

hlabel2.setForeground(Color.black);

hlabel2.setBounds(fieldx+fieldw+3,fieldy2,14,20);

fieldx=fieldx+space;

//定时的分钟文本框的位置、大小

setpanel.add(setmin);

setmin.setBounds(fieldx,fieldy2,fieldw,fieldh);

setmin.setBackground(Color.white);

//在文本框后加入单位“分”

setpanel.add(mlabel2);

mlabel2.setText("m");

mlabel2.setBackground(backcolor);

mlabel2.setForeground(Color.black);

mlabel2.setBounds(fieldx+fieldw+3,fieldy2,14,20);

fieldx=fieldx+space;

//定时的秒文本框的位置、大小

setpanel.add(setsec);

setsec.setBounds(fieldx,fieldy2,fieldw,fieldh);

setsec.setBackground(Color.white);

//在文本框后加入单位“秒”

setpanel.add(slabel2);

slabel2.setText("s");

slabel2.setBackground(backcolor);

slabel2.setForeground(Color.black);

slabel2.setBounds(fieldx+fieldw+3,fieldy2,14,20);

//设置闹钟控制按钮(on,off)

setpanel.add(cancelbutton);

setpanel.add(setbutton);

setpanel.add(stopbutton);

cancelbutton.setBounds(90,180,40,20);

setbutton.setBounds(140,180,40,20);

stopbutton.setBounds(522,180,40,20);

setbutton.addActionListener(setli);

cancelbutton.addActionListener(cancelli);

stopbutton.addActionListener(stopli);

stopbutton.setVisible(false);

//将面板加入当前容器中,并设置面板的大小和背景色

add(setpanel);

setpanel.setBounds(300,1,250,420);

setpanel.setBackground(backcolor);

/*int xcenter,ycenter,s,m,h;

//闹钟中心点所在位置

xcenter=145;

ycenter=162;

s=(int)cal.get(Calendar.SECOND);

m=(int)cal.get(Calendar.MINUTE);

h=(int)cal.get(Calendar.HOUR_OF_DAY);

//初始化指针位置

lastxs=(int)(Math.cos(s*3.14f/30-3.14f/2)*30+xcenter);

lastys=(int)(Math.sin(s*3.14f/30-3.14f/2)*30+ycenter);

lastxm=(int)(Math.cos(m*3.14f/30-3.14f/2)*25+xcenter);

lastym=(int)(Math.sin(m*3.14f/30-3.14f/2)*25+ycenter);

lastxh=(int)(Math.cos((h*30+m/2)*3.14f/180-3.14f/2)*18+xcenter);

lastyh=(int)(Math.sin((h*30+m/2)*3.14f/180-3.14f/2)*18+ycenter);

lasts=s; */

MediaTracker mt=new MediaTracker(this);//为给定组件创建一个跟踪媒体的MediaTracker对象,把图片添加到被跟踪的图片组

//Java允?Sapplet??HTML所在的位置(decument base)下?d?Y料,也允?Sapplet?钠涑淌酱a所在的位置(code base)下?d?Y料。藉由呼叫getDocumentBase()?cgotCodeBase()可得到URL物件。?@些函?????湍阏业侥阆胂螺d的?n案的位置

//clockp=getImage(getDocumentBase(),"11.png");

gif1=getImage(getCodeBase(),"2.gif");

//i为id号

mt.addImage(gif1,i++);

try

{

mt.waitForAll();

}

catch(InterruptedException e)

{};//等待加载结束

resize(600,420);//设置窗口大小

}

//窗口显示有改变的时候调用paint

public void paint(Graphics g)

{//重写paint()方法

int xh,yh,xm,ym,xs,ys,strike_times;

int xcenter,ycenter;

String today;

xcenter=148;

ycenter=186;

dat=new Date();

//用当前时间初始化日历时间

cal.setTime(dat);

//读取当前时间

s=(int)cal.get(Calendar.SECOND);

m=(int)cal.get(Calendar.MINUTE);

h=(int)cal.get(Calendar.HOUR_OF_DAY);

//换一种时间表达形式

today=df.format(dat);

//指针位置

xs=(int)(Math.cos(s*3.14f/30-3.14f/2)*30+xcenter);

ys=(int)(Math.sin(s*3.14f/30-3.14f/2)*30+ycenter);

xm=(int)(Math.cos(m*3.14f/30-3.14f/2)*25+xcenter);

ym=(int)(Math.sin(m*3.14f/30-3.14f/2)*25+ycenter);

xh=(int)(Math.cos((h*30+m/2)*3.14f/180-3.14f/2)*12+xcenter);

yh=(int)(Math.sin((h*30+m/2)*3.14f/180-3.14f/2)*12+ycenter);

//设置字体和颜色

g.setFont(F);

//前景色

g.setColor(getBackground()); //取背景色的

g.drawImage(gif1,75,110,this);

//以数字方式显示年、月、日和时间

g.drawString(today,55,415);

//画指针

g.drawLine(xcenter,ycenter,xs,ys);

g.drawLine(xcenter,ycenter-1,xm,ym); //(x1,y1,x2,y2)

g.drawLine(xcenter-1,ycenter,xm,ym);

g.drawLine(xcenter,ycenter-1,xh,yh);

g.drawLine(xcenter-1,ycenter,xh,yh);

int timedelta;//记录当前时间与闹铃定时的时差

Integer currh,currm,currs;//分别记录当前的时、分、秒

Date dat2=new Date();

cal2.setTime(dat2);

//读取当前时间

currh=(int)cal2.get(Calendar.SECOND);

currm=(int)cal2.get(Calendar.MINUTE);

currs=(int)cal2.get(Calendar.HOUR_OF_DAY);

//这样做的话说我API已过时

//timeNow=new Date();

//currh=new Integer(timeNow.getHours());

//currm=new Integer(timeNow.getMinutes());

//currs=new Integer(timeNow.getSeconds());

if(setflag)

{ //判断是否设置了闹钟

//判断当前时间是否为闹钟所定的时间

if((currh.intValue()==Integer.valueOf(sethour.getText()).intValue())(currm.intValue()==Integer.valueOf(setmin.getText()).intValue())(currs.intValue()==Integer.valueOf(setsec.getText()).intValue()))

{

ring.play();

g.drawImage(gif1,83,280,this);

stopbutton.setVisible(true);

}

timedelta=currm.intValue()*60+currs.intValue()-Integer.valueOf(setmin.getText()).intValue()*60-Integer.valueOf(setsec.getText()).intValue();

if((timedelta=30))

{

//若当前时间与闹钟相差时间超过30秒,闹钟自动停

ring.stop();

//清除的方法

g.clearRect(83,280,20,30);

}

}

dat=null;

}

public void start()

{

if(timer==null)

{

timer=new Thread(this);//将timer实例化

timer.start();

}

}

public void stop()

{

timer=null;

}

//给创建线程后start之后自动执行的函数

public void run()

{

//在run()方法中,调用repaint()方法,以重绘小程序区,进行时钟显示的更新。接着调用sleep方法让当前线程(也就是我们创建的线程clockthread)睡眠1000毫秒,因为我们每秒钟要更新一下显示,所以让它睡眠1秒

while(timer!=null)

{

try

{

timer.sleep(1000);

}

catch(InterruptedException e)

{}

//调用repaint时,会首先清除掉paint方法之前的画的内容,再调用paint方法

repaint();//刷新画面

}

timer=null;

}

//当AWT接收到一个applet的重绘请求时,它就调用applet的 update(),默认地,update() 清除applet的背景,然后调用 paint()。重载 update(),将以前在paint()中的绘图代码包含在update()中,从而避免每次重绘时将整个区域清除

//有两种方法可以明显地减弱闪烁:重载 update()或使用双缓冲。

//使用双缓冲技术:另一种减小帧之间闪烁的方法是使用双缓冲,它在许多动画Applet中被使用。其主要原理是创建一个后台图像,将需要绘制的一帧画入图像,然后调用DrawImage()将整个图像一次画到屏幕上去;好处是大部分绘制是离屏的,将离屏图像一次绘至屏幕上比直接在屏幕上绘制要有效得多,大大提高做图的性能。

// 双缓冲可以使动画平滑,但有一个缺点,要分配一张后台图像,如果图像相当大,这将需要很大一块内存;当你使用双缓冲技术时,应重载 update()。

public void update(Graphics g)

{

Image offscreen_buf=null;

//采用双缓冲技术的update()方法

if(offscreen_buf==null)

offscreen_buf=createImage(600,420);

Graphics offg=offscreen_buf.getGraphics();

offg.clipRect(1,1,599,419);

paint(offg);

Graphics ong=getGraphics();

ong.clipRect(1,1,599,419);

ong.drawImage(offscreen_buf,0,0,this);

}

/** Creates a new instance of AlarmClock */

}

用JAVA编一个小闹钟

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import javax.swing.*;

import javax.swing.Timer;

public class Clock extends JFrame implements ActionListener {

public final int HEIGTH = 200, L0 = 50, T0 = 50,N=8;

public final double RAD = Math.PI / 180.0;

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;

String st, alarm, Items1, Items2,str[];

JButton jb;

JComboBox jc1, jc2, jc3;

JLabel jl1, jl2, jl3, jl4;

JMenu jm1, jm2, jm3, jm4;

JMenuBar jmb;

JMenuItem jmi1, jmi2, jmi3, jmi4, jmi5, jmi6, jmi7, jmi8, jmi9,jmi10;

JTextField jtf1, jtf2, time;

JPanel jp1, jp2, jp3;

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);

setSize(550, 700);

setVisible(true);

Container contentPane = getContentPane();

jp2 = new JPanel();

jmb = new JMenuBar();

jm1 = new JMenu("背景颜色设置 ", true);

jmi1 = new JMenuItem("外圈颜色");

jmi1.addActionListener(this);

jmi1.setActionCommand("color1");

jm1.add(jmi1);

jmi2 = new JMenuItem("闹钟边线颜色");

jmi2.addActionListener(this);

jmi2.setActionCommand("color2");

jm1.add(jmi2);

jmi3=new JMenuItem("底盘颜色");

jmi3.addActionListener(this);

jmi3.setActionCommand("color3");

jm1.add(jmi3);

jmi4=new JMenuItem("系统时间背静颜色");

jmi4.addActionListener(this);

jmi4.setActionCommand("color4");

jm1.add(jmi4);

jmb.add(jm1);

jm2 = new JMenu("指针颜色设置 ", true);

jmi5 = new JMenuItem("秒针颜色");

jmi5.addActionListener(this);

jmi5.setActionCommand("color5");

jm2.add(jmi5);

jmi6 = new JMenuItem("分针颜色");

jmi6.addActionListener(this);

jmi6.setActionCommand("color6");

jm2.add(jmi6);

jmi7 = new JMenuItem("时针颜色");

jmi7.addActionListener(this);

jmi7.setActionCommand("color7");

jm2.add(jmi7);

jmb.add(jm2);

jm3 = new JMenu("闹铃声音设置 ", true);

jmi8 = new JMenuItem("响铃1");

jmi8.addActionListener(this);

jmi8.setActionCommand("ring1");

jm3.add(jmi8);

jmi9 = new JMenuItem("静音");

jmi9.addActionListener(this);

jmi9.setActionCommand("ring2");

jm3.add(jmi9);

jmb.add(jm3);

jm4 = new JMenu("帮助 ", true);

jmi10=new JMenuItem("使用说明");

jmi10.addActionListener(this);

jmi10.setActionCommand("help");

jm4.add(jmi10);

jmb.add(jm4);

jp2.add(jmb);

contentPane.add(jp2, BorderLayout.NORTH);

jp3 = new JPanel();

jl1 = new JLabel("闹铃时间");

jl1.setFont(new Font("楷体_GB2312", Font.BOLD, 18));

time = new JTextField("00:00", 5);

alarm = time.getText();

jb = new JButton("修改闹铃时间");

jb.addActionListener(this);

jb.setActionCommand("CC");

jp3.add(jl1);

jp3.add(time);

jp3.add(jb);

contentPane.add(jp3, BorderLayout.SOUTH);

ClockPanel clock = new ClockPanel();

contentPane.add(clock, BorderLayout.CENTER);

// 窗体添加事件监听,监听秒表的触发

ActionListener taskPerformer = new ActionListener() {

public void actionPerformed(ActionEvent evt) {

repaint();

}

};

new Timer(delay, taskPerformer).start();

}

/**

* br

* 方法说明:绘制图形

*/

Color C1 = Color.lightGray;// 外圈颜色

Color C2 = Color.black;// 边线颜色

Color C3 = Color.magenta;// 内盘颜色

Color C4 = Color.blue;// 背景颜色

Color C5 = Color.yellow;// 秒针颜色

Color C6 = Color.green;// 分针颜色

Color C7 = Color.red;//时针颜色

public class ClockPanel extends JPanel {

public void paint(Graphics g) {

h = getSize().height - 200;

// 绘制圆形

g.setColor(C1);

g.fillOval(L0 + 30, T0 + 30, h - 60, h - 60);

g.setColor(C2);

g.drawOval(L0 + 31, T0 + 31, h - 62, h - 62);

g.setColor(C3);

g.fillOval(L0 + 50, T0 + 50, h - 100, h - 100);

g.setColor(C2);

g.drawOval(L0 + 51, T0 + 51, h - 102, h - 102);

r = h / 2 - 30;

x0 = 30 + r - 5 + L0;

y0 = 30 + r - 5 - T0;

ang = 60;

for (int i = 1; i = 12; i++) {

x = (int) ((r - 10) * Math.cos(RAD * ang) + x0);

y = (int) ((r - 10) * Math.sin(RAD * ang) + y0);

g.drawString("" + i, x, h - y);

ang -= 30;

}

x0 = 30 + r + L0;

y0 = 30 + r + T0;

g.drawString("指针式时钟", 215, 200);

// 获取时间

now = Calendar.getInstance();

hh = now.get(Calendar.HOUR_OF_DAY);// 小时

mm = now.get(Calendar.MINUTE);// 分钟

ss = now.get(Calendar.SECOND);// 秒

g.setColor(C4);

g.fillRect(5, 550, 150, 30);// 填充的矩形

g.setColor(C6);

if (hh 10)

st = "0" + hh;

else

st = "" + hh;

if (mm 10)

st = st + ":0" + mm;

else

st = st + ":" + mm;

if(alarm.equals(st))

{

if(toolkit!=null)

toolkit.beep();

else {}

}

if (ss 10)

st = st + ":0" + ss;

else

st = st + ":" + ss;

{

g.setFont(new Font("华文楷体", Font.BOLD, 16));

g.drawString("系统时间:" + st, 10, 570);

}

// 计算时间和图形的关系

sdo = 90 - ss * 6;

mdo = 90 - mm * 6;

hdo = 90 - hh * 30 - mm / 2;

// 擦除秒针

if (old_X 0) {

g.setColor(C3);

} else {

old_M = mdo;

old_H = hdo;

}

// 绘制秒针

g.setColor(C5);

x = (int) ((r - 26) * Math.cos(RAD * sdo) + x0);

y = (int) ((r - 26) * Math.sin(RAD * sdo) + y0) - 2 * T0;

g.drawLine(x0, y0, x, (h - y));

old_X = x;

old_Y = y;

// 擦除分针和时针

if (mdo != old_M) {

g.setColor(C3);

old_M = mdo;

}

if (hdo != old_H) {

g.setColor(C3);

old_H = hdo;

}

// 绘制分针

g.setColor(C6);

x = (int) ((r - 50) * Math.cos(RAD * mdo) + x0);

y = (int) ((r - 50) * Math.sin(RAD * mdo) + y0) - 2 * T0;

g.drawLine(x0, y0, x, (h - y));

// 绘制时针

g.setColor(C7);

x = (int) ((r - 90) * Math.cos(RAD * hdo) + x0);

y = (int) ((r - 90) * Math.sin(RAD * hdo) + y0) - 2 * T0;

g.drawLine(x0, y0, x, (h - y));

} // 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");

repaint();

//如果撤消设置时间,就什么打印null

if(getTime==null)

System.out.println(getTime);

// dispose();

judge: if (getTime != null) {

//打印输入的设置的时间

System.out.println(getTime);

// 判断输入的是不是5位字符

if (getTime.length() != 5) {

JOptionPane.showMessageDialog(time, "格式错误\n请按格式输入5位数字", "Error",

JOptionPane.ERROR_MESSAGE);

repaint();

break judge;

}

// 判断输入的是不是数字

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

c = getTime.charAt(i);

if (i == 2 !Character.isDigit(c))

continue;

// 判断当前字符,如果不是数字则跳出该事件

if (i != 2 !Character.isDigit(c)) {

JOptionPane.showMessageDialog(this, "格式错误\n请按格式输入5位数字",

"Error",JOptionPane.ERROR_MESSAGE);

repaint();

break judge;

}

}

char[] hour = { getTime.charAt(0), getTime.charAt(1) };

char[] minute = { getTime.charAt(3), getTime.charAt(4) };

newHou = Integer.parseInt(String.valueOf(hour));

newMin = Integer.parseInt(String.valueOf(minute));

if (newHou = 24 || newHou 0) {

JOptionPane.showMessageDialog(this, "格式错误\n小时应该是不小于0不大于23的正数",

"Error", JOptionPane.ERROR_MESSAGE);

repaint();

break judge;

}

if (newMin = 60 || newHou 0) {

JOptionPane.showMessageDialog(this, "格式错误\n分钟应该是小于60的正数", "Error",

JOptionPane.ERROR_MESSAGE);

repaint();

break judge;

}

new SetTime(newHou, newMin);

}

}

if (e.getActionCommand() == "ring1") {

toolkit=Toolkit.getDefaultToolkit();

}

if(e.getActionCommand() == "ring2"){

System.out.println("静音");

toolkit=null;

}

if (e.getActionCommand() == "color1") {

String color;

Color c;

System.out.println("color1");

color = JOptionPane.showInputDialog(this, "请输入喜欢的外圈颜色(0--255)", "128");

if (color == null) {

} else {

if (Integer.parseInt(color) 0

|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的外圈颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C1 = c;

}

}

}

if(e.getActionCommand() == "color2"){

String color;

Color c;

System.out.println("color2");

color = JOptionPane.showInputDialog(this, "请输入喜欢的边线颜色(0--255)", "128");

if(color==null){}

else{if (Integer.parseInt(color) 0|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的边线颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C2 = c;

}

}

}

if(e.getActionCommand() == "color3"){

String color;

Color c;

System.out.println("color3");

color = JOptionPane.showInputDialog(this, "请输入喜欢的内盘颜色(0--255)", "128");

if(color==null){}

else{if (Integer.parseInt(color) 0|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的内盘颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C3 = c;

}

}

}

if(e.getActionCommand() == "color4"){

String color;

Color c;

System.out.println("color4");

color = JOptionPane.showInputDialog(this, "请输入喜欢的背景颜色(0--255)", "128");

if(color==null){}

else{if (Integer.parseInt(color) 0|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的背景颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C4 = c;

}

}

}

if(e.getActionCommand() == "color5"){

String color;

Color c;

System.out.println("color5");

color = JOptionPane.showInputDialog(this, "请输入喜欢的秒针颜色(0--255)", "128");

if(color==null){}

else{if (Integer.parseInt(color) 0|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的秒针颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C5 = c;

}

}

}

if(e.getActionCommand() == "color6"){

String color;

Color c;

System.out.println("color6");

color = JOptionPane.showInputDialog(this, "请输入喜欢的分针颜色(0--255)", "128");

if(color==null){}

else{if (Integer.parseInt(color) 0|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的分针颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C6 = c;

}

}

}

if(e.getActionCommand() == "color7"){

String color;

Color c;

System.out.println("color7");

color = JOptionPane.showInputDialog(this, "请输入喜欢的时针颜色(0--255)", "128");

if(color==null){}

else{if (Integer.parseInt(color) 0|| Integer.parseInt(color) 255)

JOptionPane.showInputDialog(this, "请输入喜欢的时针颜色(0--255)", "128");

else {

c = new Color(Integer.parseInt(color));

C7 = c;

}

}

}

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);

} else {

Hour = "" + String.valueOf(hour);

}

if (minute 10) {

Minute = "0" + String.valueOf(minute);

} else {

Minute = "" + String.valueOf(minute);

}

alarm = Hour + ":" + Minute;

time.setText(alarm);

repaint();

}

}

}


分享名称:一个闹钟的java代码 一个闹钟的java代码怎么写
本文URL:http://cxhlcq.com/article/ddjgphi.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部