创建一个窗口并实时显示当前时间,每1秒时钟内容更新一次,在界面中包含数字式和表盘式的显示。
绘制时钟图形:
//绘制图形
Graphics2D g2D=(Graphics2D) g;//Graphics强制类型转换成Graphics2D
Insets insets =getInsets();//创建JFrame的边界对象
int L=insets.left/2,T=insets.top/2;//L=左边界的2/1,T=上边界的2/1
h =getSize().height;//返回JFrame的高度
g.setColor(new Color(115,74,18));//设置画笔颜色为棕色
//画圆
g2D.setStroke(new BasicStroke(5.0f));//勾画出宽度为4cm的圆
g.drawOval(L+40,T+40,h-80,h-80);//
r=h/2-40;
x_1=40+r-5+L;
y_1=40+r-5-T;
ang=60;
//绘制时钟上的12个字
g.setFont(new Font("",Font.BOLD,12));
g.setColor(new Color(255,255,255));
for(int i=1;i<=12;i++) {
x=(int)((r+12)*Math.cos(RAD * ang)+x_1);
y=(int)((r+12)*Math.sin(RAD * ang)+y_1);
g.drawString(""+ i,x, h-y);
ang -=30;
}
获得现在的时间:
Calendar now=new GregorianCalendar();//创建Calender对象now
int hour=now.get(Calendar.HOUR_OF_DAY);//取得当前的小时部分
int minute=now.get(Calendar.MINUTE);//取得当前时间的分钟部分
int second =now.get(Calendar.SECOND);//取得当前时间的秒
String st;
if(hour<10)
st="0"+hour;
else
st=""+hour;
if(minute<10)
st+=":0"+minute;
else
st +=":"+minute;
if(second<10)
st+=":0"+second;
else
st +=":"+second;
//窗体上显示时间格式,如00:00:00
擦除秒针,原理是将秒针颜色改变为原来的背景颜色(绘制分针和时针的原理与此相同):
if(ss_x>0) {//擦除秒针,原理为改变为原来的背景颜色
g.setColor(getBackground());
g.drawLine(x_1, y_1, ss_x, h-ss_y);
}else {
old_m = mm;
old_h = hh;
}
绘制秒针:
x=(int)(r*0.9*Math.cos(RAD*ss))+x_1;
y=(int)(r*0.9*Math.sin(RAD*ss))+y_1-2*T;
g.setColor(new Color(255,99,71));
g.drawLine(x_1, y_1, x, h-y);
ss_x=x;
ss_y=y;
新建窗口并创建一个时间计数器,实现每一秒触发一次:
public rw23() {
super("JAVA 小时钟");
setDefaultCloseOperation(3);
Image image =getToolkit().getImage("1.jpg");
setIconImage(image);
setSize(500,500);
setBackground(Color.black);
setLocation(300,150);
setResizable(false);
setVisible(true);
show();
int delay =1000;
ActionListener draw =new ActionListener() {//创建一个监听事件
public void actionPerformed(ActionEvent evt) {
repaint();
}
};
new Timer(delay,draw).start();//创建一个时间计数器,每一秒触发一次
}
完整的代码可点此进行获取:
https://download.csdn.net/download/atishoo_13/10684018
若想改变窗口的颜色,可参看RGB颜色查询对照表:
https://blog.csdn.net/Atishoo_13/article/details/82788669