JAVA画时钟代码

A具有“开始”“停止”按钮的图形界面。B点击“开始”按钮,显示时钟;点击“停止”按钮,清除屏幕。C时钟界面有12个小时的点,三根不同的指针,短粗的指针是时针,长粗的指针为... A 具有“开始”“停止”按钮的图形界面。
B 点击“开始”按钮,显示时钟;点击“停止”按钮,清除屏幕。
C 时钟界面有12个小时的点,三根不同的指针,短粗的指针是时针,长粗的指针为分针,长细的指针为秒针。
D 时钟以1秒为单位运动。
按照要求给代码吗,要实现开始停止按钮的功能的
展开
 我来答
匿名用户
2014-01-06
展开全部
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;
        final double RAD = Math.PI/180;

    public ClockPointer(){
        super("Java时钟");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Image image = getToolkit().getImage("clock.gif");
        setIconImage(image);
        setSize(400,400);
        setBackground(Color.white);
        //setLocation(300,150);
        this.setLocationRelativeTo(null);
        setResizable(true);
        int delay = 1000;
        //创建一个监听事件

        setVisible(true);
        ActionListener drawClock = new ActionListener(){
            public void actionPerformed(ActionEvent evt){
                repaint();
            }
        };
        //创建一个时间计数器,每一秒触发一次
        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);
        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(2.0f));
        g.setColor(Color.gray);
        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.setColor(Color.black);
            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=fmTime.format(now.getTime());
        //在窗体上显示时间
        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*6;
        hh = 90 - nowh*30 - nowm/2;
        x0 = r+40+L;
        y0 = r+40+T;
        g2D.setStroke(new BasicStroke(1.2f));
        //擦除秒针
        //if(olds_x > 0){
        //    g.setColor(getBackground());
        //    // g.setColor(Color.gray);
        //    g.drawLine(x0, y0, olds_x, h-olds_y); // (?)
        //}
        //绘制秒针
        x = (int)(r*0.9*Math.cos(RAD*ss))+x0;
        y = (int)(r*0.9*Math.sin(RAD*ss))+y0-2*T;
        g.setColor(Color.yellow);
        g.drawLine(x0, y0, x, h-y);
        olds_x = x;
        olds_y = y;
        g2D.setStroke(new BasicStroke(2.2f));
        //擦除分针
        //if(old_m!=mm){
        //    g.setColor(getBackground());
        //    g.drawLine(x0,y0,oldm_x,h-oldm_y);
        //}
        //绘制分针
        x = (int)(r*0.7*Math.cos(RAD*mm))+x0;
        y = (int)(r*0.7*Math.sin(RAD*mm))+y0-2*T;
        g.setColor(Color.green);
        g.drawLine(x0,y0,x,h-y);
        oldm_x = x;
        oldm_y = y;
        old_m = mm;
        g2D.setStroke(new BasicStroke(3.2f));
        //擦除时针
        //if(old_h!=hh){
        //    g.setColor(getBackground());
        //    g.drawLine(x0,y0,oldh_x,h-oldh_y);
        //}
        //绘制时针
        x = (int)(r*0.5*Math.cos(RAD*hh))+x0;
        y = (int)(r*0.5*Math.sin(RAD*hh))+y0-2*T;
        g.setColor(Color.red);
        g.drawLine(x0,y0,x,h-y);
        oldh_x = x;
        oldh_y = y;
        old_h = hh;
    }

    public static void main(String[] args){
        new ClockPointer();
    }
}

//整理一下
追问
可以按照要求给我代码吗
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式