第一篇 javase时钟表

package Q1;

/*

*类1

*@此类创建钟表窗体组件

*/
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class ClockApp extends JFrame implements ActionListener{
StillClock clock=new StillClock();
JPanel controlpanel=new JPanel();//controlpanel控制面板
JButton pause=new JButton("暂停");
JButton resume=new JButton("继续");
BorderLayout layout=new BorderLayout();
ClockApp()
{
setLayout(layout);
setTitle("时钟程序");
setSize(new Dimension(400,400));//Dimension外形尺寸
Container content=this.getContentPane();
controlpanel.add(pause);
controlpanel.add(resume);
content.add(clock,layout.CENTER);
content.add(controlpanel,layout.SOUTH);
pause.addActionListener(this);
resume.addActionListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(pause))
{
clock.stop();
}
if(e.getSource().equals(resume))
{
clock.start();
}

}
}

package Q1;

/*

*类2

*继承父类 Timer类

*/

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.*;

import javax.swing.*;


public class Clock extends Timer{

 public Clock(int delay, ActionListener listener) {
  super(delay, listener);
  
 }

}

package Q1;

/*

*类3

*设计静态钟表,以及时分秒针的状态,并初始化其位置

*/

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;public class StillClock extends Canvas implements ActionListener{//停止的钟表
 Line2D secondLine=new Line2D.Double(0,0,0,0);
 Line2D minuteLine=new Line2D.Double(0,0,0,0);
 Line2D hourLine=new Line2D.Double(0,0,0,0);
 ClockControl clockcontrol=new ClockControl();
 Clock clock;
 StillClock()
 {
  clock=new Clock(1000,this);
  clock.start();
 }
 public void paint(Graphics g)
 {
  Graphics2D g2d=(Graphics2D)g;
  g2d.fillOval(190, 140, 20, 20);//用颜色填充钟表
  drawLine(g2d);
  drawPoint(g2d);
  this.setBackground(Color.DARK_GRAY);
 }
 
 public void actionPerformed(ActionEvent e) {
  repaint();
 }
 void start()
 {
  clock.start();
 }
 void stop()
 {
  clock.stop();
 }
 void drawLine(Graphics2D g2d)
 {
  clockcontrol.update();
  secondLine.setLine(200,150,clockcontrol.getPonintSX() ,clockcontrol.getPonintSY());
  minuteLine.setLine(200,150,clockcontrol.getPonintMX() ,clockcontrol.getPonintMY());
  hourLine.setLine(200,150,clockcontrol.getPonintHX() ,clockcontrol.getPonintHY());
  g2d.setColor(Color.RED);
  BasicStroke sbs=new BasicStroke(3,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
  g2d.setStroke(sbs);
  g2d.draw(secondLine);
  g2d.setColor(Color.green);
  BasicStroke mbs=new BasicStroke(5,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
  g2d.setStroke(mbs);
  g2d.draw(minuteLine);
  g2d.setColor(Color.BLUE);
  BasicStroke hbs=new BasicStroke(7,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
  g2d.setStroke(hbs);
  g2d.draw(hourLine);
 }
 void drawPoint(Graphics2D g2d)
 {
  double x[]=clockcontrol.getPointX();
  double y[]=clockcontrol.getPointY();
  for(int i=0;i<60;i++)
  {
   g2d.setColor(Color.RED);
   if(i%5==0)
   {
    if(i==0)
     g2d.drawString(""+12,(int)x[i], (int)y[i]);
    else
     g2d.drawString(""+i/5,(int)x[i], (int)y[i]);
   }
   g2d.drawString(clockcontrol.getTimeString(), 150, 300);
   g2d.setColor(Color.BLACK);
   g2d.fillOval((int)x[i], (int)y[i], 4, 4);
  }
 }
}

package Q1;

/*

*类4

*设计核心部分,时分秒针相互关系,以及在面板上显示出当前时间。

*/

import java.awt.Dimension;
import java.util.*;

public class ClockControl {
 double pointSX[] = new double[60];

 double pointSY[] = new double[60];

 double pointMX[] = new double[60];

 double pointMY[] = new double[60];

 double pointHX[] = new double[60];

 double pointHY[] = new double[60];
 
 double pointX[]=new double[60];
 double pointY[]=new double[60];

 int hour, minute, second;

 ClockControl() {
  pointX[0]=0;
  pointY[0]=-120;
  pointSX[0]=0;
  pointSY[0]=-100;
  pointMX[0]=0;
  pointMY[0]=-90;
  pointHX[0]=0;
  pointHY[0]=-70;     
  double angle=6*Math.PI/180;
  for(int i=0;i<59;i++)
  {
   pointX[i+1]=pointX[i]*Math.cos(angle)-Math.sin(angle)*pointY[i];
   pointY[i+1]=pointY[i]*Math.cos(angle)+Math.sin(angle)*pointX[i];
   
   pointSX[i+1]=pointSX[i]*Math.cos(angle)-Math.sin(angle)*pointSY[i];
   pointSY[i+1]=pointSY[i]*Math.cos(angle)+Math.sin(angle)*pointSX[i];
   
   pointHX[i+1]=pointHX[i]*Math.cos(angle)-Math.sin(angle)*pointHY[i];
   pointHY[i+1]=pointHY[i]*Math.cos(angle)+Math.sin(angle)*pointHX[i];
   
   pointMX[i+1]=pointMX[i]*Math.cos(angle)-Math.sin(angle)*pointMY[i];
   pointMY[i+1]=pointMY[i]*Math.cos(angle)+Math.sin(angle)*pointMX[i];  
  }
  for(int i=0;i<60;i++)
  { 
   pointSX[i]+=200;
   pointSY[i]+=150;
   pointMX[i]+=200;
   pointMY[i]+=150;
   pointHX[i]+=200;
   pointHY[i]+=150;
   pointX[i]+=200;
   pointY[i]+=150;
  }

 }

 void update() {
  Date nowdate = new Date();
  String datestr = nowdate.toString();
  hour = Integer.parseInt(datestr.substring(11, 13));
  minute = Integer.parseInt(datestr.substring(14, 16));
  second = Integer.parseInt(datestr.substring(17, 19));
 }

 double getPonintSY() {
  return pointSY[second];
 }

 double getPonintSX() {
  return pointSX[second];
 }

 double getPonintHX() {
  return pointHX[hour%12*5+minute/12];
 }

 double getPonintHY() {
  return pointHY[hour%12*5+minute/12];
 }

 double getPonintMX() {
  return pointMX[minute];
 }

 double getPonintMY() {
  return pointMY[minute];
 }
 double[] getPointX()
 {
  return pointX;
 }
 double[] getPointY()
 {
  return pointY;
 }
 String getTimeString()
 {
  String str="现在时间:"+hour+":"+minute+":"+second;
  return str;
 }
}

package Q1;

/*

*类5

*创建测试、运行主函数

*/

public class Test {


 public static void main(String[] args) {
  ClockApp a=new ClockApp();
 }

}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值