中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

一個(gè)精美的java時(shí)鐘 (自動(dòng)換背景 秒針平滑移動(dòng))

2018-07-20    來(lái)源:open-open

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import java.net.URL;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import javax.swing.JFrame;
import javax.swing.JLabel;

/**
 * 一個(gè)精美的時(shí)鐘 (自動(dòng)換背景 秒針平滑移動(dòng))
 * 
 * 注意:背景圖片需放在該包的image目錄下(命名:1.jpg...5.jpg)
 */
public class Clock extends JFrame {
	// 今天的日期對(duì)象
	private GregorianCalendar now = new GregorianCalendar();
	// 時(shí)鐘標(biāo)簽,上面畫(huà)的是圓形時(shí)鐘
	private ClockLabel clockLabel = new ClockLabel();
	// 星期標(biāo)簽,指示星期
	private JLabel weekLabel = new JLabel();
	// 日期標(biāo)簽,指示日期
	private JLabel dateLabel = new JLabel();
	// 品牌標(biāo)簽
	private JLabel remarkLabel = new JLabel();
	// 時(shí)間標(biāo)簽,指示時(shí)間
	private JLabel timeLabel = new JLabel();

	public Clock() {

		setTitle("時(shí)鐘");
		setSize(500, 480);
		setLocation(((int) Toolkit.getDefaultToolkit().getScreenSize()
				.getWidth() - 500) / 2, ((int) Toolkit.getDefaultToolkit()
				.getScreenSize().getHeight() - 480) / 2);
		init();
		setResizable(false);
	}

	private void init() {

		// 初始化品牌標(biāo)簽
		remarkLabel.setText("MyClock");
		remarkLabel.setLocation(205, 80);
		remarkLabel.setSize(100, 30);
		remarkLabel.setFont(new Font("Bookman Old Style", Font.BOLD, 20));
		remarkLabel.setForeground(Color.orange);

		// 初始化星期標(biāo)簽
		weekLabel.setSize(60, 20);
		weekLabel.setLocation(315, 190);
		weekLabel.setForeground(Color.pink);
		weekLabel.setFont(new Font("Arial Narrow", Font.BOLD, 12));
		// 為星期標(biāo)簽賦值
		int week = now.get(Calendar.DAY_OF_WEEK);
		switch (week) {
		case 1:
			weekLabel.setText("SUNDAY");
			break;
		case 2:
			weekLabel.setText("MONDAY");
			break;
		case 3:
			weekLabel.setText("TUESDAY");
			break;
		case 4:
			weekLabel.setText("WEDNESDAY");
			break;
		case 5:
			weekLabel.setText("THURSDAY");
			break;
		case 6:
			weekLabel.setText("FRIDAY");
			break;
		case 7:
			weekLabel.setText("SATURDAY");
			break;
		}

		// 初始化日期標(biāo)簽
		dateLabel.setSize(20, 20);
		dateLabel.setLocation(375, 190);
		dateLabel.setForeground(Color.pink);
		dateLabel.setFont(new Font("Fixedsys", Font.BOLD, 12));
		dateLabel.setText("" + now.get(Calendar.DATE));

		// 初始化時(shí)間標(biāo)簽
		timeLabel.setSize(500, 30);
		timeLabel.setLocation(100, 400);
		timeLabel.setForeground(new Color(0, 64, 128));
		timeLabel.setFont(new Font("Fixedsys", Font.PLAIN, 15));

		// 將各組件加入到主窗口中
		Container con = getContentPane();
		con.setBackground(Color.white);
		con.setLayout(null);
		con.add(weekLabel);
		con.add(dateLabel);
		con.add(remarkLabel);
		con.add(timeLabel);
		con.add(clockLabel);
	}

	public static void main(String[] args) {
		Clock clock = new Clock();
		clock.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		clock.setVisible(true);
	}

	// 自定義時(shí)鐘標(biāo)簽,畫(huà)一個(gè)圓形的時(shí)鐘
	class ClockLabel extends JLabel implements Runnable {
		// 時(shí)鐘標(biāo)簽的寬度和高度
		private final int WIDTH = 500;
		private final int HEIGHT = 440;

		// 圓形時(shí)鐘的X半徑和Y半徑
		private final int CIRCLE_X_RADIUS = 150;
		private final int CIRCLE_Y_RADIUS = 155;

		// 圓形時(shí)鐘的原點(diǎn)
		private final int CIRCLE_X = 250;
		private final int CIRCLE_Y = 200;

		// 圓形時(shí)鐘指針的長(zhǎng)度
		private final int HOUR_LENGTH = 70;
		private final int MIN_LENGTH = 100;
		private final int SEC_LENGTH = 135;

		// 當(dāng)前時(shí)針?biāo)幍慕嵌?		double arcHour = 0;
		// 當(dāng)前分針?biāo)幍慕嵌?		double arcMin = 0;
		// 當(dāng)前秒針?biāo)幍慕嵌?		double arcSec = 0;

		// 顏色的透明度,
		int alpha = 60;
		// 標(biāo)識(shí)顏色透明度變化的方向,為true時(shí)表示越來(lái)越透明,為false時(shí)表示月來(lái)越不透明
		boolean flag = false;
		// 背景圖片的id,輪換顯示背景圖片時(shí)使用
		int imageID = 0;
		// 背景圖片對(duì)象數(shù)組
		Image img[] = new Image[5];
		// 背景圖片URL,在該包的image目錄下(命名:1.jpg...5.jpg)
		URL url[] = new URL[] { ClockLabel.class.getResource("image/1.jpg"),
				ClockLabel.class.getResource("image/2.jpg"),
				ClockLabel.class.getResource("image/3.jpg"),
				ClockLabel.class.getResource("image/4.jpg"),
				ClockLabel.class.getResource("image/5.jpg"),
				ClockLabel.class.getResource("image/6.jpg") };

		// 一個(gè)具有緩沖區(qū)的圖像對(duì)象
		BufferedImage bufferedImage = null;
		int imageSize = 2 * Math.max(CIRCLE_X_RADIUS, CIRCLE_Y_RADIUS);
		// 為bufferedImage創(chuàng)建的Graphics對(duì)象,用于在bufferedImage上畫(huà)圖
		Graphics bufferedImageGraphics = null;
		// 時(shí)鐘線程
		Thread clockThread = null;
		// 計(jì)數(shù)器
		int count = 0;

		public ClockLabel() {

			// 設(shè)置時(shí)鐘標(biāo)簽的大小
			this.setSize(WIDTH, HEIGHT);

			// 獲取時(shí)針、分針、秒針當(dāng)前的角度
			arcHour = now.get(Calendar.HOUR) * (360.0 / 12)
					+ now.get(Calendar.MINUTE) * (360.0 / 12 / 60)
					+ now.get(Calendar.SECOND) * (360.0 / 12 / 60 / 60);
			arcMin = now.get(Calendar.MINUTE) * (360.0 / 60)
					+ now.get(Calendar.SECOND) * (360.0 / 60 / 60);
			arcSec = now.get(Calendar.SECOND) * (360.0 / 60);

			// 根據(jù)圖片URL創(chuàng)建圖片對(duì)象
			Toolkit tk = this.getToolkit();
			img[0] = tk.createImage(url[0]);
			img[1] = tk.createImage(url[1]);
			img[2] = tk.createImage(url[2]);
			img[3] = tk.createImage(url[3]);
			img[4] = tk.createImage(url[4]);
			try {
				// 使用MediaTracker加載圖片對(duì)象
				// MediaTracker 類(lèi)是一個(gè)跟蹤多種媒體對(duì)象狀態(tài)的實(shí)用工具類(lèi),
				// 媒體對(duì)象可以包括音頻剪輯和圖像,但目前僅支持圖像.
				MediaTracker mt = new MediaTracker(this);
				mt.addImage(img[0], 0);
				mt.addImage(img[1], 0);
				mt.addImage(img[2], 0);
				mt.addImage(img[3], 0);
				mt.addImage(img[4], 0);
				// 加載媒體跟蹤器中所有的圖像。
				mt.waitForAll();
			} catch (Exception e) {
				e.printStackTrace();
			}

			// 創(chuàng)建一個(gè)有緩沖的Image對(duì)象
			bufferedImage = new BufferedImage(imageSize, imageSize,
					BufferedImage.TYPE_INT_ARGB);
			// 為BufferedImage創(chuàng)建Graphics2D對(duì)象,
			// 以后用該Graphics2D對(duì)象畫(huà)的圖都會(huì)畫(huà)在BufferedImage中
			bufferedImageGraphics = bufferedImage.createGraphics();

			// 啟動(dòng)線程
			clockThread = new Thread(this);
			clockThread.start();
		}

		public void paint(Graphics g1) {
			// Graphics2D繼承Graphics,比Graphics提供更豐富的方法
			Graphics2D g = (Graphics2D) g1;

			/** ***畫(huà)圓形時(shí)鐘的刻度,每6度便有一個(gè)刻度**** */
			for (int i = 0; i < 360; i = i + 6) {
				g.setColor(Color.gray);
				// 設(shè)置畫(huà)筆的寬度為2
				g.setStroke(new BasicStroke(2));

				// 畫(huà)刻度
				if (i % 90 == 0) {
					// 對(duì)于0,3,6,9點(diǎn)位置,使用一個(gè)大的刻度
					g.setColor(Color.pink);
					g.setStroke(new BasicStroke(7));// 畫(huà)筆寬度為5
					// 當(dāng)起點(diǎn)和終點(diǎn)一樣時(shí),畫(huà)的就是點(diǎn)
					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) {
					// 如果角度處于小時(shí)的位置,而且還不在0,3,6,9點(diǎn)時(shí),畫(huà)紅色的小刻度
					g.setColor(Color.orange);
					g.setStroke(new BasicStroke(3));// 畫(huà)筆寬度為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 {
					// 其他位置就畫(huà)小刻度
					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));
				}
			}

			/** ****** 畫(huà)時(shí)鐘的指針 ******** */
			// 畫(huà)時(shí)針
			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);
			// 設(shè)置畫(huà)筆寬度和顏色
			g.setStroke(new BasicStroke(8));
			g.setColor(Color.pink);
			// 利用Graphics2D的draw方法畫(huà)線
			g.draw(lh);

			// 畫(huà)分針
			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);

			// 畫(huà)秒針
			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);

			/** **** 畫(huà)時(shí)鐘背景,并將其透明處理 ******* */
			// 所有使用bufferedImageGraphics畫(huà)的圖像,都畫(huà)在bufferedImage上,
			// drawImage方法的參數(shù)含義分別是:背景圖片對(duì)象、目標(biāo)位置第一個(gè)角的X、Y坐標(biāo)、目標(biāo)位置第二個(gè)角的X、Y坐標(biāo)、
			// 源位置第一個(gè)角的X、Y坐標(biāo)、源位置第二個(gè)角的X、Y坐標(biāo)、圖像對(duì)象改變時(shí)的通知接受者
			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)坐標(biāo)的顏色值
					int pix = bufferedImage.getRGB(i, j);
					Color c = new Color(pix);
					int R = c.getRed();
					int G = c.getGreen();
					int B = c.getBlue();
					// 通過(guò)Color對(duì)象的alpha,使顏色透明。
					int newpix = new Color(R, G, B, alpha).getRGB();
					// 重新設(shè)置背景圖像該象素點(diǎn)的顏色
					bufferedImage.setRGB(i, j, newpix);
				}
			}

			/** 以上畫(huà)背景操作都是畫(huà)在bufferedImage上的,這里要將bufferedImage畫(huà)在ClockLabel **/
			// 將當(dāng)前用戶剪貼區(qū) Clip 與橢圓區(qū)域相交,并將 Clip 設(shè)置為所得的交集
			g.clip(new Ellipse2D.Double(95, 45, imageSize, imageSize));
			g.setColor(Color.white);
			// 在用戶剪貼區(qū)畫(huà)bufferedImage
			g.drawImage(bufferedImage, 95, 45, this);
		}

		public void run() {
			try {

				while (clockThread != null) {

					// 計(jì)數(shù)
					count++;
					// 獲得完整的日期格式
					DateFormat df = DateFormat.getDateTimeInstance(
							DateFormat.FULL, DateFormat.FULL);
					// 格式化當(dāng)前時(shí)間
					String s = df.format(new Date());
					timeLabel.setText(s);
					// 每動(dòng)一次對(duì)時(shí)鐘指針的角度進(jìn)行調(diào)整
					arcSec += 360.0 / 60 / 10; // 每秒轉(zhuǎn)6度
					arcMin += 360.0 / 60 / 60 / 10; // 每60秒轉(zhuǎn)6度
					arcHour += 360.0 / 12 / 60 / 60 / 10; // 每3600秒轉(zhuǎn)30度

					// 當(dāng)角度滿一圈時(shí),歸0
					if (arcSec >= 360) {
						arcSec = 0;
					}
					if (arcMin >= 360) {
						arcMin = 0;
					}
					if (arcHour >= 360) {
						arcHour = 0;
					}
					// 實(shí)現(xiàn)背景透明度漸變
					// 從淺入深,再由深入淺。
					if (count % 2 == 0) {// 用于背景替換減速
						if (flag) {
							alpha += 1;
							if (alpha == 60) {
								flag = !flag;
							}
						} else {
							alpha -= 1;
							if (alpha == 0) {
								flag = !flag;
								// 當(dāng)透明度變化一個(gè)輪回時(shí),換一張背景圖
								imageID++;
								if (imageID == 4) {
									imageID = 0;
								}
							}
						}
						if (count >= 2147483647) { // 防溢出
							count = 0;
						}
					}
					// 重畫(huà)時(shí)鐘標(biāo)簽
					repaint();

					// 等待0.1秒鐘
					Thread.sleep(100);

				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

標(biāo)簽: seo 媒體

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:JavaScript實(shí)現(xiàn)的計(jì)算器

下一篇:jpg圖像文件縮放Java類(lèi)(按指定比例縮放,按指定寬高縮放)