本文实例为大家分享了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&¤tstate>=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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。