01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | public void paint(Graphics g1) { Graphics2D g = (Graphics2D) g1; /** ***画圆形时钟的刻度,每6度便有一个刻度**** */ for ( int i = 0 ; i < 360 ; i = i + 6 ) { g.setColor(Color.gray); g.setStroke( new BasicStroke( 2 )); if (i % 90 == 0 ) { g.setColor(Color.pink); g.setStroke( new BasicStroke( 7 )); 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 ) { g.setColor(Color.orange); g.setStroke( new BasicStroke( 3 )); 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 { 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); 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.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++) { int pix = bufferedImage.getRGB(i, j); Color c = new Color(pix); int R = c.getRed(); int G = c.getGreen(); int B = c.getBlue(); int newpix = new Color(R, G, B, alpha).getRGB(); bufferedImage.setRGB(i, j, newpix); } } /** 以上画背景操作都是画在bufferedImage上的,这里要将bufferedImage画在ClockLabel **/ g.clip( new Ellipse2D.Double( 95 , 45 , imageSize, imageSize)); g.setColor(Color.white); g.drawImage(bufferedImage, 95 , 45 , this ); } |