import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 右侧闹钟面板类
*/
class ClockPanel extends JPanel implements MouseListener,Runnable{
JTextField time; JButton bt; JLabel jl; //jl是提示的label
String s; Thread t; PlayMusic music;
public ClockPanel(){
//构造GUI界面
this.setBorder(BorderFactory.createTitledBorder("闹钟控制"));//设置面板边框
this.setLayout(new GridLayout(2, 1));
JPanel p1=new JPanel();
time=new JTextField(19);
time.setText("请输入正确格式的时间");
time.setFocusable(false);
bt=new JButton("确定");
p1.add(time); p1.add(bt);
jl=new JLabel(" *时间格式形如:12:00:00");
jl.setFont(new Font("微软雅黑",Font.PLAIN,14));
jl.setForeground(Color.red);
jl.setAlignmentX(JLabel.CENTER);
this.add(p1); this.add(jl);
time.addMouseListener(this);
bt.addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
if(e.getSource()==bt){
//如果用户点击确定
if(bt.getText()=="确定"){
//时间正则 12:00:00
Pattern p=Pattern.compile("^(([0-1][0-9])|2[0-3]):[0-5][0-9]:[0-5][0-9]$");
s=time.getText(); //填写的时间字符串
Matcher m=p.matcher(s);
if(m.find()) { //如果时间填写正确,则开始定时
//定时闹钟线程开始
t=new Thread(this); t.start();
jl.setText(" 成功,闹钟已设定为:"+s);
jl.setForeground(Color.blue);
jl.setFont(new Font("微软雅黑",Font.BOLD,14));
time.setEditable(false); //时间填写文本框不可编辑
bt.setText("停止");
}else{ //如果时间填写错误,则提示
jl.setText(" 请输入正确的时间格式,形如:12:00:00");
jl.setForeground(Color.red);
}
}else{ //如果用户点击停止,则背景音乐停止播放,滴答声又开始播放
music.stop(); //背景音乐停止
Main.globalMusic.play(); //滴答声开始播放
time.setEditable(true); //时间填写文本框可编辑
bt.setText("确定");
jl.setFont(new Font("微软雅黑",Font.PLAIN,14));
jl.setForeground(Color.darkGray);
jl.setText(" *时间格式形如:12:00:00");
}
}
}
@Override
public void mousePressed(MouseEvent e) {
if(e.getSource()==time){
if(time.getText().equals("请输入正确格式的时间")){
time.setFocusable(true);
time.setText("");
}
}
}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {
if(e.getSource()==time){
if(time.getText().equals(""))
time.setText("请输入正确格式的时间");
}
}
@Override
public void run() {
while (true){
//如果到时间了
if(TimeTool.getTime().equals(time.getText())){ //如果当前时间等于用户填写的时间
Main.globalMusic.stop(); //滴答声停止
music=new PlayMusic(SettingPanel.bgmusicIndex); //背景音乐响起
music.play();
jl.setText("闹钟响起,正在播放"+music.getMusicName()+"...");
t.stop();//撤销线程
break;
}
try {Thread.sleep(1000);} //线程暂停一秒(1000毫秒)
catch (InterruptedException e){ e.printStackTrace();} //输出出错信息
}
}
}