java实现时钟表盘

2022-10-07,,

本文实例为大家分享了java实现时钟表盘的具体代码,供大家参考,具体内容如下

设计并实现一个模拟时钟功能的应用程序。程序中应显示时针、分针和秒针,并同时以数字形式显示当前时间。

实现结果:

源代码如下:

//clockpanel.java
import javax.swing.*;
import java.util.calendar;  
import java.util.gregoriancalendar;  
import java.util.timer;  
import java.util.timertask;  
import java.text.simpledateformat;
import java.util.locale;  
import java.awt.*;
import java.awt.event.*;

public class clockpanel extends jpanel{
    private gregoriancalendar calendar;
    private jbutton btn;
    private jbutton btn2;
    private int currentstate=8; 
    private string zone;
    private int hourtemp;
    final int x=320, y=240, r=120;   // 圆心坐标,半径
    private int xpos,ypos;
    private int hour,minute,second; 
    private int xhour,yhour,xminute,yminute,xsecond,ysecond;//表针位置(大端)
    private int xhour1,yhour1,xminute1,yminute1,xsecond1,ysecond1;//表针位置(小端)
    private double a_sec,a_min ,a_hour;//角度

    clockpanel() {   // 创建定时器对象
        timer t = new timer();  
        task task = new task();  
        t.schedule(task, 0, 1000); 
        setlayout(new borderlayout(10,20)); 
        btn=new jbutton("时区  上");
        btn2=new jbutton("时区 下");
        btn.setborder(borderfactory.createraisedbevelborder());
        btn2.setborder(borderfactory.createraisedbevelborder());
        btn.setbackground(color.green);
        btn2.setbackground(color.green);
        btn.addactionlistener(new buttonlistener()); 
        btn2.addactionlistener(new buttonlistener()); 
        add(btn,borderlayout.west); 
        add(btn2,borderlayout.east); 
    }
    //相关事件处理
    private class buttonlistener implements actionlistener {
        public void actionperformed(actionevent event) {    

            if (event.getsource()==btn)
                currentstate++;
            if (event.getsource()==btn2)
                currentstate--;
        }

    }

    public void paintcomponent(graphics g){ 
        super.paintcomponent(g); 
        double alfa;    //所画点对应的角度
        graphics2d g2d=(graphics2d)g;
        basicstroke bstroke=new basicstroke(1.0f);
        basicstroke bstroke2=new basicstroke(2.0f);
        basicstroke bstroke3=new basicstroke(3.0f);

        g2d.setstroke(bstroke2);
        for(int i=0;i<=360;i+=6)  {
            alfa=math.toradians(i);  //角度用弧度表示
            xpos=x+(int)(r*math.cos(alfa));   // x坐标
            ypos=y-(int)(r*math.sin(alfa));   // y坐标
            int xbegin=320+(int)(144*math.sin(alfa));
            int ybegin=240-(int)(144*math.cos(alfa));
            int xend=320+(int)(159*math.sin(alfa));
            int yend=240-(int)(159*math.cos(alfa));

            g2d.setcolor(color.black);
            g2d.drawline(xbegin,ybegin,xend,yend);

            g2d.setcolor(color.red);
            switch(i){  // 写时钟数字刻度
                case 0: g2d.drawstring("3", xpos,ypos);
                        break;
                case 90: g2d.drawstring("12", xpos,ypos);
                        break;
                case 180: g2d.drawstring("9", xpos,ypos);
                        break;
                case 270: g2d.drawstring("6",xpos,ypos);
                        break;      
            }

            if(i%30==0){
                g2d.drawline(xbegin,ybegin,xend,yend);
            }

        }


        g2d.setcolor(color.black);
        g2d.setstroke(bstroke3);
        g2d.drawline(x, y, xhour,yhour);    // 画时针
        g2d.drawline(x, y, xhour1,yhour1);  
        g2d.setcolor(color.blue);
        g2d.setstroke(bstroke2);
        g2d.drawline(x, y, xminute,yminute);    // 画分针
        g2d.drawline(x, y, xminute1,yminute1);
        g2d.setcolor(color.red);
        g2d.setstroke(bstroke);
        g2d.drawline(x, y, xsecond,ysecond);    // 画秒针
        g2d.drawline(x, y, xsecond1,ysecond1);
        //表盘中心点1
        g2d.drawoval(317,237,6,6); 
        g2d.filloval(317,237,6,6);
        //表盘中心点2
        g2d.setcolor(color.black);
        g2d.drawoval(319,238,4,4); 
        g2d.filloval(319,238,4,4);
        //表盘中心圆环
        g2d.setcolor(color.orange);
        g2d.drawoval(300,220,40,40); 
        g2d.setcolor(color.black);
        g2d.drawstring("15010140079",290,376); 

        gregoriancalendar gre=new gregoriancalendar(); 
        simpledateformat dateforamt1=new simpledateformat("yyyy年mm月dd日e");
        //simpledateformat dateforamt2=new simpledateformat("h时m分s秒");
        g2d.setcolor(color.black);
        g2d.setfont(new font("san_serif",font.bold,20)); 
        g2d.drawstring(dateforamt1.format(gre.gettime()),250,50);

        g2d.drawstring(hour+"时"+minute+"分"+second+"秒",260,430);
        //时区判断
        if(currentstate>12){
            currentstate=-11;
        }
        else if(currentstate<-11){
            currentstate=12;
        }
        if(currentstate<=12&&currentstate>=1)
            zone="东"+currentstate+"区";
        else
            zone="西"+(1-currentstate)+"区";
        g2d.drawstring(zone,170,50); 

    }

    class task extends timertask {  
        public void run() {  
            calendar = new gregoriancalendar();  
            hourtemp=currentstate>0?(currentstate-8):(currentstate-1);
            hour = calendar.get(calendar.hour)+hourtemp;  
            minute = calendar.get(calendar.minute);  
            second = calendar.get(calendar.second); 

            a_sec = second * 2 * math.pi / 60;
            a_min = minute * 2 * math.pi / 60 + a_sec / 60;
            a_hour = hour * 2 * math.pi / 12 + a_min / 12;
            // 计算时、分、秒针的末端位置
            xsecond=320+(int)(110*math.sin(a_sec));
            ysecond=240-(int)(110*math.cos(a_sec));
            xminute=320+(int)(90 *math.sin(a_min));
            yminute=240-(int)(90 *math.cos(a_min));
            xhour=  320+(int)(70 *math.sin(a_hour));
            yhour=  240-(int)(70 *math.cos(a_hour));
            xsecond1=320-(int)(22*math.sin(a_sec));
            ysecond1=240+(int)(22*math.cos(a_sec));
            xminute1=320-(int)(15*math.sin(a_min));
            yminute1=240+(int)(15*math.cos(a_min));
            xhour1  =320-(int)(5 *math.sin(a_hour));
            yhour1  =240+(int)(5 *math.cos(a_hour));

            repaint();  
        }  
    }  
}


//
//clock.java
import javax.swing.*;

public class clock{ 
    public static void main(string[] args) {
         jframe frame=new jframe("clock");    //创建图文框
         frame.setdefaultcloseoperation(jframe.exit_on_close);
         frame.getcontentpane().add(new clockpanel()); //添加面板
         frame.setvisible(true);
         frame.setsize(640,480);         
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

《java实现时钟表盘.doc》

下载本文的Word格式文档,以方便收藏与打印。