java實(shí)現(xiàn)動(dòng)態(tài)時(shí)鐘并設(shè)置鬧鐘功能
本文實(shí)例為大家分享了java實(shí)現(xiàn)動(dòng)態(tài)時(shí)鐘設(shè)置鬧鐘功能,供大家參考,具體內(nèi)容如下

顯示如上圖所示的動(dòng)態(tài)時(shí)鐘,并且可以設(shè)置鬧鐘,播放mp3。
首先用到的是時(shí)鐘(Timer)和日歷(Calendar)得到系統(tǒng)的當(dāng)前時(shí)間。
代碼如下:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;
import javax.media.CannotRealizeException;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javazoom.jl.player.Player;
public class Clock extends JFrame {
MyPanel clockPanel;
Ellipse2D.Double e;
int x;
int y;
Line2D.Double hourLine;
Line2D.Double minLine;
Line2D.Double secondLine;
GregorianCalendar calendar;
int hour;
int minute;
int second;
String timestr = "";
static int sethour;
static int setminute;
static int setsecond;
public static final int X = 60;
public static final int Y = 60;
public static final int X_BEGIN = 10;
public static final int Y_BEGIN = 10;
public static final int RADIAN = 50;
public Clock(){
setSize(300, 200);
setTitle("動(dòng)態(tài)時(shí)鐘");
clockPanel = new MyPanel();
add(clockPanel);
Timer t = new Timer();
Task task = new Task();
t.schedule(task, 0, 1000);//每秒刷新一次
}
File file = new File("當(dāng)我想你的時(shí)候.mp3");
public static void playMusic(File file) { //顯示mp3文件的絕對(duì)路徑
try {
javax.media.Player player = null;
if (file.exists()) {
MediaLocator locator = new MediaLocator("file:"
+ file.getAbsolutePath());
System.out.println(file.getAbsolutePath());
player = Manager.createRealizedPlayer(locator);
player.prefetch();// Ԥ準(zhǔn)備讀取
player.start();// 開始讀取
} else {
System.out.println("沒找到文件");
}
} catch (CannotRealizeException ex) {
ex.printStackTrace();
} catch (NoPlayerException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void play() {//播放mp3文件
try {
BufferedInputStream buffer = new BufferedInputStream(new FileInputStream("當(dāng)我想你的時(shí)候.mp3"));
Player player = new Player(buffer);
player.play();
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) {
Clock t = new Clock();
t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
t.setVisible(true);
//t.setLocationRelativeTo(null);//窗體顯示在屏幕中央
//輸入要設(shè)置的鬧鐘時(shí)間
sethour = Integer.parseInt(JOptionPane.showInputDialog("請(qǐng)輸入小時(shí):"));
setminute = Integer.parseInt(JOptionPane.showInputDialog("請(qǐng)輸入分鐘:"));
setsecond = Integer.parseInt(JOptionPane.showInputDialog("請(qǐng)輸入秒:"));
}
class MyPanel extends JPanel {
public MyPanel() {
e = new Ellipse2D.Double(X_BEGIN, Y_BEGIN, 100, 100);
hourLine = new Line2D.Double(X, Y, X, Y);
minLine = new Line2D.Double(X, Y, X, Y);
secondLine = new Line2D.Double(X, Y, X, Y);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.drawString("12", 55, 25);//整點(diǎn)時(shí)間
g2.drawString("6", 55, 105);
g2.drawString("9", 15, 65);
g2.drawString("3", 100, 65);
g2.drawString(timestr, 0, 130);
g2.draw(e);
g2.draw(hourLine);//時(shí)針
g2.draw(minLine);//分針
g2.draw(secondLine);//秒針
}
}
class Task extends TimerTask {
public void run() {
calendar = new GregorianCalendar();
hour = calendar.get(Calendar.HOUR);
minute = calendar.get(Calendar.MINUTE);
second = calendar.get(Calendar.SECOND);
if(sethour == hour && setminute == minute && setsecond == second){
playMusic(file);
play();
}
timestr = "當(dāng)前時(shí)間:" + hour + " : " + minute + " : " + second;
hourLine.x2 = X + 40 * Math.cos(hour * (Math.PI / 6) - Math.PI / 2);
hourLine.y2 = Y + 40 * Math.sin(hour * (Math.PI / 6) - Math.PI / 2);
minLine.x2 = X + 45
* Math.cos(minute * (Math.PI / 30) - Math.PI / 2);
minLine.y2 = Y + 45
* Math.sin(minute * (Math.PI / 30) - Math.PI / 2);
secondLine.x2 = X + 50
* Math.cos(second * (Math.PI / 30) - Math.PI / 2);
secondLine.y2 = Y + 50
* Math.sin(second * (Math.PI / 30) - Math.PI / 2);
repaint();
}
}
}
其中播放mp3文件需要下載對(duì)應(yīng)的jar包,否則不能播放。
下載地址:java實(shí)現(xiàn)動(dòng)態(tài)時(shí)鐘
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java實(shí)現(xiàn)的簡單數(shù)字時(shí)鐘功能示例
- java多線程編程制作電子時(shí)鐘
- java實(shí)現(xiàn)的小時(shí)鐘示例分享
- Java編程小實(shí)例—數(shù)字時(shí)鐘的實(shí)現(xiàn)代碼示例
- Java實(shí)現(xiàn)的動(dòng)態(tài)數(shù)字時(shí)鐘功能示例【顯示世界時(shí)間】
- java實(shí)現(xiàn)時(shí)鐘效果
- Java實(shí)現(xiàn)動(dòng)態(tài)模擬時(shí)鐘
- Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘
- JavaFX實(shí)現(xiàn)簡易時(shí)鐘效果(一)
- java實(shí)現(xiàn)時(shí)鐘表盤
相關(guān)文章
java.lang.ArrayStoreException異常的解決方案
這篇文章主要介紹了java.lang.ArrayStoreException異常的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Springboot項(xiàng)目打war包docker包找不到resource下靜態(tài)資源的解決方案
今天小編就為大家分享一篇關(guān)于Springboot項(xiàng)目打war包docker包找不到resource下靜態(tài)資源的解決方案,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的方法
這篇文章主要介紹了Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的方法,涉及Java數(shù)學(xué)運(yùn)算計(jì)算隨機(jī)數(shù)及字符串操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Java調(diào)用阿里身份證實(shí)現(xiàn)驗(yàn)證接口
這篇文章主要為大家詳細(xì)介紹了Java如何調(diào)用阿里身份證實(shí)現(xiàn)驗(yàn)證接口,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-06-06
Java Spring數(shù)據(jù)單元配置過程解析
這篇文章主要介紹了Java Spring數(shù)據(jù)單元配置過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12

