一个java时钟 非常精致!
来源:互联网 发布:javascript 模块化编程 编辑:程序博客网 时间:2024/04/29 14:06
一个精美的java时钟 (自动换背景 秒针平滑移动)
部分核心代码:
public void paint(Graphics g1) {// Graphics2D继承Graphics,比Graphics提供更丰富的方法Graphics2D g = (Graphics2D) g1;/** ***画圆形时钟的刻度,每6度便有一个刻度**** */for (int i = 0; i < 360; i = i + 6) {g.setColor(Color.gray);// 设置画笔的宽度为2g.setStroke(new BasicStroke(2));// 画刻度if (i % 90 == 0) {// 对于0,3,6,9点位置,使用一个大的刻度g.setColor(Color.pink);g.setStroke(new BasicStroke(7));// 画笔宽度为5// 当起点和终点一样时,画的就是点g.drawLine(CIRCLE_X+ (int) (Math.cos(i * Math.PI / 180) * CIRCLE_X_RADIUS),CIRCLE_Y+ (int) (Math.sin(i * Math.PI / 180) * CIRCLE_Y_RADIUS),CIRCLE_X+ (int) (Math.cos(i * Math.PI / 180) * CIRCLE_X_RADIUS),CIRCLE_Y+ (int) (Math.sin(i * Math.PI / 180) * CIRCLE_Y_RADIUS));} else if (i % 30 == 0) {// 如果角度处于小时的位置,而且还不在0,3,6,9点时,画红色的小刻度g.setColor(Color.orange);g.setStroke(new BasicStroke(3));// 画笔宽度为3g.drawLine(CIRCLE_X+ (int) (Math.cos(i * Math.PI / 180) * CIRCLE_X_RADIUS),CIRCLE_Y+ (int) (Math.sin(i * Math.PI / 180) * CIRCLE_Y_RADIUS),CIRCLE_X+ (int) (Math.cos(i * Math.PI / 180) * CIRCLE_X_RADIUS),CIRCLE_Y+ (int) (Math.sin(i * Math.PI / 180) * CIRCLE_Y_RADIUS));} else {// 其他位置就画小刻度g.setColor(Color.gray);g.drawLine(CIRCLE_X+ (int) (Math.cos(i * Math.PI / 180) * CIRCLE_X_RADIUS),CIRCLE_Y+ (int) (Math.sin(i * Math.PI / 180) * CIRCLE_Y_RADIUS),CIRCLE_X+ (int) (Math.cos(i * Math.PI / 180) * CIRCLE_X_RADIUS),CIRCLE_Y+ (int) (Math.sin(i * Math.PI / 180) * CIRCLE_Y_RADIUS));}}/** ****** 画时钟的指针 ******** */// 画时针Line2D.Double lh = new Line2D.Double(CIRCLE_X, CIRCLE_Y, CIRCLE_X+ Math.cos((arcHour - 90) * Math.PI / 180) * HOUR_LENGTH,CIRCLE_Y + Math.sin((arcHour - 90) * Math.PI / 180)* HOUR_LENGTH);// 设置画笔宽度和颜色g.setStroke(new BasicStroke(8));g.setColor(Color.pink);// 利用Graphics2D的draw方法画线g.draw(lh);// 画分针Line2D.Double lm = new Line2D.Double(CIRCLE_X, CIRCLE_Y, CIRCLE_X+ Math.cos((arcMin - 90) * Math.PI / 180) * MIN_LENGTH,CIRCLE_Y + Math.sin((arcMin - 90) * Math.PI / 180)* MIN_LENGTH);g.setStroke(new BasicStroke(4));g.setColor(Color.orange);g.draw(lm);// 画秒针Line2D.Double ls = new Line2D.Double(CIRCLE_X, CIRCLE_Y, CIRCLE_X+ Math.cos((arcSec - 90) * Math.PI / 180) * SEC_LENGTH,CIRCLE_Y + Math.sin((arcSec - 90) * Math.PI / 180)* SEC_LENGTH);g.setStroke(new BasicStroke(1));g.setColor(Color.lightGray);g.draw(ls);/** **** 画时钟背景,并将其透明处理 ******* */// 所有使用bufferedImageGraphics画的图像,都画在bufferedImage上,// drawImage方法的参数含义分别是:背景图片对象、目标位置第一个角的X、Y坐标、目标位置第二个角的X、Y坐标、// 源位置第一个角的X、Y坐标、源位置第二个角的X、Y坐标、图像对象改变时的通知接受者bufferedImageGraphics.drawImage(img[imageID], 0, 0, imageSize,imageSize, 0, 0, imageSize + 10, imageSize + 10, this);// 将背景图片透明化for (int j = 0; j < imageSize; j++) {for (int i = 0; i < imageSize; i++) {// 获得背景图像中(i, j)坐标的颜色值int pix = bufferedImage.getRGB(i, j);Color c = new Color(pix);int R = c.getRed();int G = c.getGreen();int B = c.getBlue();// 通过Color对象的alpha,使颜色透明。int newpix = new Color(R, G, B, alpha).getRGB();// 重新设置背景图像该象素点的颜色bufferedImage.setRGB(i, j, newpix);}}/** 以上画背景操作都是画在bufferedImage上的,这里要将bufferedImage画在ClockLabel **/// 将当前用户剪贴区 Clip 与椭圆区域相交,并将 Clip 设置为所得的交集g.clip(new Ellipse2D.Double(95, 45, imageSize, imageSize));g.setColor(Color.white);// 在用户剪贴区画bufferedImageg.drawImage(bufferedImage, 95, 45, this);}
- 一个java时钟 非常精致!
- 一个java android 时钟 非常精致!android 小创意
- 非常有意思的一个小时钟
- c# 精致时钟的代码
- 一个关于时钟的非常简单的小例子
- 做一个精致的电子工程师
- Java 显示时钟:编写程序显示一个时钟
- 五步教你制作漂亮精致的HTML时钟
- Photoshop制作非常精致的蓝色水晶按钮
- Photoshop设计网页按钮_非常精致蓝色水晶按钮
- 用JAVA做一个时钟程序
- 下面是一个时钟显示的JavaScript文档。在文档中用了非常多的函数
- 一个java写的聊天室,非常不错
- 非常有意思的人体时钟
- 一个时钟
- java时钟
- Java时钟
- java 时钟
- Symfony
- .NET多线程编程(2):System.Threading.Thread类
- 排序算法练习二
- 支持向量机(SVM)基础
- u盘被写保护怎么办
- 一个java时钟 非常精致!
- 【转载】网络协议学习方法和工具
- android应用实现自动检测版本升级
- mysql负载均衡 方案
- C# Base64加密解密算法实现
- 线程中的参数传递
- date(): It is not safe to rely on the system's timezone settings
- App Widget Provider 应用
- 《课程格子》的一个笔试题目