java 表_我的Java钟表

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

费了我一天才做完的,而且付出了相应的代价(落下两顿饭),有兴趣的看看吧!!呵呵

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.awt.*;

import java.util.Calendar;

import java.util.GregorianCalendar;

import javax.swing.*;

public class TIME extends  Frame implements ActionListener

{

int ss,mm,hh,osx,osy,omx,omy,oldm,oldh,ohx,ohy;

Button close=new Button("关闭窗口");

final double RAD=Math.PI/180;

public static void main(String args[])

{

new TIME();

}

public TIME()

{

setTitle("钟表");

setSize(400,400);

setVisible(true);

setBackground(Color.red);

setResizable(false);

setLayout(null);

int delay=1000;

close.setSize(80,20);

close.setLocation(250,40);

add(close);

close.addActionListener(this);

ActionListener drawClock=new ActionListener()

{

public void actionPerformed(ActionEvent ec)

{ repaint();}

};

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

}

public void paint(Graphics g)

{

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;

if(nowh<10) st="0"+nowh;else st=""+nowh;

if(nowm<10) st+=":0"+nowm;else st+=":"+nowm;

if(nows<10) st+=":0"+nows;else st+=":"+nows;

g.setColor(Color.pink);

g.fillRect(10,30,80,28);

g.setColor(Color.blue);

g.setFont(new Font("宋体",Font.BOLD,14));

g.drawString(st,20,46);

Graphics2D g2D=(Graphics2D)g;

g2D.setStroke(new BasicStroke(4.0f));

g.setColor(Color.green);

g.drawOval(60,100,250,250);

g.fillOval(180,220,12,12);

g.setColor(Color.black);

g.drawString("12",180,110);

g.drawString("9",60,230);

g.drawString("6",180,350);

g.drawString("3",304,230);

ss=270+nows*6;//最大是360!所以乘以6;

mm=270+nowm*6;

hh=270+nowh*30;

int x,y;

if (osx>0)

{

g.setColor(getBackground());

g.drawLine(185,225,osx,osy);

}

x=(int)(105*0.9*Math.cos(RAD*ss))+185;

y=(int)(105*0.9*Math.sin(RAD*ss))+225;

g.setColor(Color.blue);

g.drawLine(186,226,x,y);

osx=x;

osy=y;

if(oldm!=mm)

{

g.setColor(getBackground());

g.drawLine(185,225,omx,omy);

}

x=(int)(105*0.7*Math.cos(RAD*mm))+185;

y=(int)(105*0.7*Math.sin(RAD*mm))+225;

g.setColor(Color.black);

g.drawLine(185,225,x,y);

omx=x;

omy=y;

oldm=mm;

if(oldh!=hh)

{

g.setColor(getBackground());

g.drawLine(185,225,ohx,ohy);

}

x=(int)(105*0.5*Math.cos(RAD*hh))+185;

y=(int)(105*0.5*Math.sin(RAD*hh))+225;

g.setColor(Color.yellow);

g.drawLine(185,225,x,y);

ohx=x;

ohy=y;

oldh=hh;

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==close)

{

System.exit(0);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
盘式时钟,并显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 Clock extends JFrame implements ActionListener{ 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; final double RAD = Math.PI/180; public Clock(){ super("Java时钟"); setDefaultCloseOperation(3); Image image = getToolkit().getImage("clock.gif"); setIconImage(image); setSize(200,200); setBackground(Color.black); setLocation(300,150); setResizable(false); show(); int delay = 1000; //创建一个监听事件 ActionListener drawClock = new ActionListener(){ public void actionPerformed(ActionEvent evt){ repaint(); } }; //创建一个时间计数器,每一秒触发一次 new Timer(delay,drawClock).start(); } //实现ActionListener接口必须实现的方法 public void actionPerformed(ActionEvent evt){} //绘制图形 public void paint(Graphics g){ Graphics2D g2D = (Graphics2D)g; Insets insets = getInsets(); int L = insets.left/2, T = insets.top/2; h = getSize().height; g.setColor(Color.white); //画圆 g2D.setStroke(new BasicStroke(4.0f)); g.drawOval(L+40, T+40, h-80, h-80); r = h/2 - 40; x0 = 40 + r - 5 + L; y0 = 40 + r - 5 - T; ang = 60; //绘制时钟上的12个字 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; } //获得现在的时间 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; if(nowh < 10)st = "0"+nowh; else st = ""+nowh; if(nowm<10)st += ":0"+nowm; else st += ":"+nowm; if(nows<10)st += ":0"+nows; else st += ":"+nows; //在窗体上显示时间 g.setColor(Color.pink); g.fillRect(L, T, 50, 28); g.setColor(Color.blue); g.drawString(st,L+2,T+26); //计算时间与度数的关系 ss = 90 - nows*6; mm = 90 - nowm*
制作一个钟表可以分为以下几个步骤: 1. 创建一个窗口并设置窗口大小。 ```java JFrame frame = new JFrame("Clock"); frame.setSize(400, 400); ``` 2. 创建一个面板并将其添加到窗口中。 ```java JPanel panel = new JPanel(); frame.add(panel); ``` 3. 创建一个时钟面板并将其添加到面板中。 ```java ClockPanel clockPanel = new ClockPanel(); panel.add(clockPanel); ``` 4. 创建一个时钟面板类并实现绘制钟表的方法。 ```java public class ClockPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); // 获取当前时间 Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); // 计算时针、分针、秒针的角度 int hourAngle = (int) ((hour + minute / 60.0) * 30); int minuteAngle = (int) (minute * 6); int secondAngle = (int) (second * 6); // 绘制时针 g.setColor(Color.BLACK); g.drawLine(200, 200, (int) (200 + 60 * Math.sin(Math.toRadians(hourAngle))), (int) (200 - 60 * Math.cos(Math.toRadians(hourAngle)))); // 绘制分针 g.setColor(Color.BLUE); g.drawLine(200, 200, (int) (200 + 80 * Math.sin(Math.toRadians(minuteAngle))), (int) (200 - 80 * Math.cos(Math.toRadians(minuteAngle)))); // 绘制秒针 g.setColor(Color.RED); g.drawLine(200, 200, (int) (200 + 100 * Math.sin(Math.toRadians(secondAngle))), (int) (200 - 100 * Math.cos(Math.toRadians(secondAngle)))); } } ``` 5. 启动窗口。 ```java frame.setVisible(true); ``` 完整代码如下: ```java import java.awt.Color; import java.awt.Graphics; import java.util.Calendar; import javax.swing.JFrame; import javax.swing.JPanel; public class Clock { public static void main(String[] args) { JFrame frame = new JFrame("Clock"); frame.setSize(400, 400); JPanel panel = new JPanel(); frame.add(panel); ClockPanel clockPanel = new ClockPanel(); panel.add(clockPanel); frame.setVisible(true); } } class ClockPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); // 获取当前时间 Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); // 计算时针、分针、秒针的角度 int hourAngle = (int) ((hour + minute / 60.0) * 30); int minuteAngle = (int) (minute * 6); int secondAngle = (int) (second * 6); // 绘制时针 g.setColor(Color.BLACK); g.drawLine(200, 200, (int) (200 + 60 * Math.sin(Math.toRadians(hourAngle))), (int) (200 - 60 * Math.cos(Math.toRadians(hourAngle)))); // 绘制分针 g.setColor(Color.BLUE); g.drawLine(200, 200, (int) (200 + 80 * Math.sin(Math.toRadians(minuteAngle))), (int) (200 - 80 * Math.cos(Math.toRadians(minuteAngle)))); // 绘制秒针 g.setColor(Color.RED); g.drawLine(200, 200, (int) (200 + 100 * Math.sin(Math.toRadians(secondAngle))), (int) (200 - 100 * Math.cos(Math.toRadians(secondAngle)))); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值