失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java小程序--多彩时钟表盘的制作

Java小程序--多彩时钟表盘的制作

时间:2022-04-16 04:05:42

相关推荐

Java小程序--多彩时钟表盘的制作

Java小程序–多彩时钟表盘的制作

最近闲来无事,就想着用刚学的Java知识编写一些简单的小程序用来练练手。于是在网上搜了一些Java小程序来补充一下思路,就想到了可以用Java来制作一个简单的表盘。但是既然是自己创作,就要搞点不一样的。这就是今天我要分享的内容–多彩时钟表盘的制作。

先简单来说一下具体的功能特点:就是用三中不同的颜色来表示时分秒,三种颜色相当于三个指针,从而通过颜色的不同变化中得知具体的时间。

为了更好的理解我的这个小程序,我特意用PS做了一个草图(如下方所示):

大概就是这么个样子,话不多说,直接开始写代码。

首先,肯定要先创建一个窗口用来承载我们想要显示的内容:

JFrame j = new JFrame("圆点时钟");j.setLocation(420,85);j.setSize(518, 543);j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);j.setVisible(true);

简单几行代码,窗口就创建完成了。由于Java是面向对象编程,所以我们必须以面向对象的思想来进行下面具体功能的实现。

通过上面那个草图我们可以看出来,表盘分为圆盘轮廓、12个圆点刻度以及圆盘里面的文字三部分。由于我们要固定圆点的位置,所以要创建一个圆点类,类里面要有圆点的横纵坐标,代码如下:

class myCircle {//创建圆点类,定义横纵坐标属性double x;double y;public myCircle() {x = 0;y = 0;}}

接下来就要创建圆点类对象来固定12个圆点刻度在圆盘中的位置,这个也是十分简单的,要经过一些计算。但是我嫌计算过于麻烦,还要牵扯到圆周率,就没有使用for循环进行计算,直接通过精确的数值一次对其作了位置确定。代码如下:

//固定12个圆点在表盘中的位置(用循环计算实在是麻烦,就一个一个来确定位置了)mc[0].x = circlePart * 3;mc[0].y = 0;mc[1].x = circlePart * 4.5;mc[1].y = circlePart * 0.5;mc[2].x = circlePart * 5.4;mc[2].y = circlePart * 1.5;mc[3].x = circlePart * 6 - PaintTime.littleCIRCLE_D;mc[3].y = circlePart * 3;mc[4].x = circlePart * 5.4;mc[4].y = circlePart * 4.3;mc[5].x = circlePart * 4.5;mc[5].y = circlePart * 5.3;mc[6].x = circlePart * 3;mc[6].y = circlePart * 6 - PaintTime.littleCIRCLE_D;mc[7].x = circlePart * 1.3;mc[7].y = circlePart * 5.3;mc[8].x = circlePart * 0.4;mc[8].y = circlePart * 4.3;mc[9].x = 0;mc[9].y = circlePart * 3;mc[10].x = circlePart * 0.4;mc[10].y = circlePart * 1.5;mc[11].x = circlePart * 1.3;mc[11].y = circlePart * 0.5;

其中三个变量值为我定义的圆盘直径、圆点刻度直径和圆盘经过分割后的平均直径:

public static final int CIRCLE_D = 500;//圆盘的直径public static final int littleCIRCLE_D = 20;//小圆点的直径double circlePart = PaintTime.CIRCLE_D / 6;//将圆盘直径平均分为6等份

接下来就是获取时间并将时间转换成三种颜色显示在圆盘上,也可以在圆盘内部添加解释内容和作者名字以及其他想添加的内容。具体代码如下,此代码片段也是该小程序的核心代码。

@SuppressWarnings("deprecation")public void paint(Graphics g) {Date date = new Date();SimpleDateFormat ft = new SimpleDateFormat("hh:mm:ss");//设置当前时间格式为 时:分:秒//设置画笔super.paint(g);g.setColor(Color.BLACK);g.setFont(new Font("宋体", Font.BOLD,15));g.drawOval(0, 0, PaintTime.CIRCLE_D, PaintTime.CIRCLE_D);//画圆盘轮廓String s1 = "当前时间:";String s2 = ft.format(date).toString();//获取当前时间,格式为"hh:mm:ss"String s3 = "表示时针";String s4 = "表示分针";String s5 = "表示秒针";String s6 = "Designed by Anthony-Z";//画显示文字和显示时间g.drawRect(180, 240, 160, 30);g.drawString(s1, 190, 260);g.drawString(s2, 260, 260);//显示3颜色注释以及开发作者g.setColor(Color.RED);g.fillOval(230, 300, 10, 10);g.setColor(Color.GREEN);g.fillOval(230, 320, 10, 10);g.setColor(Color.YELLOW);g.fillOval(230, 340, 10, 10);g.setColor(Color.BLACK);g.setFont(new Font("宋体", Font.ITALIC, 10));g.drawString(s3, 250, 310);g.drawString(s4, 250, 330);g.drawString(s5, 250, 350);g.setFont(new Font("华文行楷", Font.CENTER_BASELINE ,12));g.drawString(s6, 200, 220);//获取当前时间为int类型hour = date.getHours();min = date.getMinutes();sec = date.getSeconds();if(hour >= 12){hour = hour - 12;//让其一直保持12制格式}for(int i = 0; i < mc.length ; i++){//画12个圆点if(hour == i){//判断时钟刻度是否指到该指针,如果是,给其强调颜色为红色g.setColor(Color.RED);g.fillOval((int)mc[i].x, (int)mc[i].y, 20, 20);}else if(min / 5 == i){//判断分钟刻度是否指到该指针,如果是,给其强调颜色为绿色g.setColor(Color.GREEN);g.fillOval((int)mc[i].x, (int)mc[i].y, 20, 20);}else if(sec / 5 == i){//判断秒钟刻度是否指到该指针,如果是,给其强调颜色为黄色g.setColor(Color.YELLOW);g.fillOval((int)mc[i].x, (int)mc[i].y, 20, 20);}else{//如果都不符合,则显示为普通黑色g.setColor(Color.BLACK);g.fillOval((int)mc[i].x, (int)mc[i].y, 20, 20);}}

因为要想让表盘走动,必须要进行重绘,我这里设置的是每100ms重回一次,代码如下:

Timer time = new Timer();public void action(){time.schedule(new TimerTask(){public void run(){repaint();//每隔100ms重绘一次}},100,100);}

**由于程序比较简单,但其中有些细节或者代码片段没有说到,故附上源代码分享给大家

**

源代码如下:

package paintTime;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import javax.swing.JFrame;import javax.swing.JPanel;/*** 制作多彩时钟圆盘* 功能:用3中不同的颜色来表示时分秒,三种颜色相当于三个指针* 实现:窗口、圆盘、12个刻度圆点、色彩处理、时间显示* @author Anthony-Z【旭】**/public class PaintTime {public static final int CIRCLE_D = 500;//圆盘的直径public static final int littleCIRCLE_D = 20;//小圆点的直径public static void main(String[] args) {//创建窗口并把画板添加到窗口中JFrame j = new JFrame("圆点时钟");Mytime m = new Mytime();j.setLocation(420,85);j.setSize(518, 543);m.action();j.add(m);j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);j.setVisible(true);}}class Mytime extends JPanel{/*** */private static final long serialVersionUID = 1L;double circlePart = PaintTime.CIRCLE_D / 6;myCircle[] mc = new myCircle[12];//12个圆点int hour;int min;int sec;public Mytime() {for (int i = 0; i < mc.length; i++) {mc[i] = new myCircle();}//固定12个圆点在表盘中的位置(用循环计算实在是麻烦,就一个一个来确定位置了)mc[0].x = circlePart * 3;mc[0].y = 0;mc[1].x = circlePart * 4.5;mc[1].y = circlePart * 0.5;mc[2].x = circlePart * 5.4;mc[2].y = circlePart * 1.5;mc[3].x = circlePart * 6 - PaintTime.littleCIRCLE_D;mc[3].y = circlePart * 3;mc[4].x = circlePart * 5.4;mc[4].y = circlePart * 4.3;mc[5].x = circlePart * 4.5;mc[5].y = circlePart * 5.3;mc[6].x = circlePart * 3;mc[6].y = circlePart * 6 - PaintTime.littleCIRCLE_D;mc[7].x = circlePart * 1.3;mc[7].y = circlePart * 5.3;mc[8].x = circlePart * 0.4;mc[8].y = circlePart * 4.3;mc[9].x = 0;mc[9].y = circlePart * 3;mc[10].x = circlePart * 0.4;mc[10].y = circlePart * 1.5;mc[11].x = circlePart * 1.3;mc[11].y = circlePart * 0.5;}@SuppressWarnings("deprecation")public void paint(Graphics g) {Date date = new Date();SimpleDateFormat ft = new SimpleDateFormat("hh:mm:ss");//设置当前时间格式为 时:分:秒//设置画笔super.paint(g);g.setColor(Color.BLACK);g.setFont(new Font("宋体", Font.BOLD,15));g.drawOval(0, 0, PaintTime.CIRCLE_D, PaintTime.CIRCLE_D);//画圆盘轮廓String s1 = "当前时间:";String s2 = ft.format(date).toString();//获取当前时间,格式为"hh:mm:ss"String s3 = "表示时针";String s4 = "表示分针";String s5 = "表示秒针";String s6 = "Designed by Anthony-Z";//画显示文字和显示时间g.drawRect(180, 240, 160, 30);g.drawString(s1, 190, 260);g.drawString(s2, 260, 260);//显示3颜色注释以及开发作者g.setColor(Color.RED);g.fillOval(230, 300, 10, 10);g.setColor(Color.GREEN);g.fillOval(230, 320, 10, 10);g.setColor(Color.YELLOW);g.fillOval(230, 340, 10, 10);g.setColor(Color.BLACK);g.setFont(new Font("宋体", Font.ITALIC, 10));g.drawString(s3, 250, 310);g.drawString(s4, 250, 330);g.drawString(s5, 250, 350);g.setFont(new Font("华文行楷", Font.CENTER_BASELINE ,12));g.drawString(s6, 200, 220);//获取当前时间为int类型hour = date.getHours();min = date.getMinutes();sec = date.getSeconds();if(hour >= 12){hour = hour - 12;//让其一直保持12制格式}for(int i = 0; i < mc.length ; i++){//画12个圆点if(hour == i){//判断时钟刻度是否指到该指针,如果是,给其强调颜色为红色g.setColor(Color.RED);g.fillOval((int)mc[i].x, (int)mc[i].y, 20, 20);}else if(min / 5 == i){//判断分钟刻度是否指到该指针,如果是,给其强调颜色为绿色g.setColor(Color.GREEN);g.fillOval((int)mc[i].x, (int)mc[i].y, 20, 20);}else if(sec / 5 == i){//判断秒钟刻度是否指到该指针,如果是,给其强调颜色为黄色g.setColor(Color.YELLOW);g.fillOval((int)mc[i].x, (int)mc[i].y, 20, 20);}else{//如果都不符合,则显示为普通黑色g.setColor(Color.BLACK);g.fillOval((int)mc[i].x, (int)mc[i].y, 20, 20);}}}Timer time = new Timer();public void action(){time.schedule(new TimerTask(){public void run(){repaint();//每隔100ms重绘一次}},100,100);}}class myCircle {//创建圆点类,定义横纵坐标属性double x;double y;public myCircle() {x = 0;y = 0;}}

最后的运行结果如下图:

相比较我的草图还算可以!

程序比较简单,但是毕竟是靠自己一点一点码出来的,所以有不足之处还请看到的大佬指正。本人刚学Java不久,所以将自己的一点经验分享给刚入Java的小白们,希望对你们学习面向对象编程有所帮助!

如果觉得《Java小程序--多彩时钟表盘的制作》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。