急需要一个简单的JAVA闹钟程序

急需要一个简单的JAVA闹钟程序,下面是小要求:
设计的要求:
(1)主界面能显示闹钟响铃启动时间(一个闹钟就可以了),进入闹铃的设置按钮;
(2)在闹铃的设置界面能设置和取消闹钟提醒,设置响铃时间;
(3)最好每行代码旁边都有解释之类的,因为本人小白,这个程序到时候还要讲解给老师听的。
急需要啊各位朋友,能做出来的发我邮箱:lfr118@sina.com,收到可用后一定把积分给你!!好的话再追加积分!!
也不需要每行代码都要有解释,关键的一些难以弄懂的地方给个解释就行了

写了一个,也尽量在你可能不懂的地方添加注释了。不过其实注释越多不见得越好,因为有时你太在意注释反而没弄清整体的代码结构。

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
 * 闹钟主界面
 */
public class AlarmClock extends JFrame implements ActionListener {
private static final int LOOP_COUNT = 5; // 重复播放的次数
private JLabel labelClock, labelAlarm, labelNextAlarm;
private JButton btnSet, btnClose;
private SetDialog setDialog;
private JPanel topPanel, alarmPanel;
private Timer timer;
private Clip clip;
private Calendar alarmCal;
private boolean timeReached = true;
private DateFormat df = new SimpleDateFormat("HH : mm");

public AlarmClock() {
super("闹钟");
}

public void launch() {
setSize(400, 300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);

getContentPane().setLayout(new BorderLayout()); // 利用边界布局将界面分割成上中下三部分
labelAlarm = new JLabel("闹钟定时已到!");
btnClose = new JButton("确定");
labelNextAlarm = new JLabel(); // 指示下一次闹钟时间
alarmPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); // 顶部提示栏提示闹钟时间已到,和确定按钮
alarmPanel.add(labelAlarm);
alarmPanel.add(btnClose);

topPanel = new JPanel(new GridLayout(2, 1));
topPanel.add(alarmPanel);
topPanel.add(labelNextAlarm);
alarmPanel.setVisible(false); // 初始隐藏顶部提示栏

labelClock = new JLabel();
Font font = new Font(Font.SERIF, Font.PLAIN, 48); // 中间的倒计时文本用大号字体展示
labelClock.setFont(font);
labelClock.setHorizontalAlignment(JLabel.CENTER); // 文本居中
btnSet = new JButton("设置");

getContentPane().add(topPanel, BorderLayout.NORTH); // 界面顶部
getContentPane().add(labelClock, BorderLayout.CENTER); // 界面中部
getContentPane().add(btnSet, BorderLayout.SOUTH); // 界面底部

btnSet.addActionListener(this); // 设置按钮的点击事件
btnClose.addActionListener(this); // 顶部确定按钮的点击事件
setLocationRelativeTo(null); // 界面居中
setDialog = new SetDialog(this); // 初始化设置对话框

try { // 初始化闹钟声音
// 目前发现wav格式的文件是可以支持的,mp3不支持
AudioInputStream ais = AudioSystem.getAudioInputStream(
AlarmClock.class.getResource("/res/alarm.wav"));
clip = AudioSystem.getClip();
clip.open(ais);
ais.close();
int loop = LOOP_COUNT <= 0 ? 1 : LOOP_COUNT;
final long totalFrames = ais.getFrameLength() * loop;
clip.addLineListener(new LineListener() {
@Override
public void update(LineEvent e) {
// 当闹钟音乐播放结束时,自动隐藏顶部提示栏
if(e.getFramePosition() >= totalFrames) {
stopAlarm();
}
}
});
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (LineUnavailableException e) {
e.printStackTrace();
}
initTimer();
}

public static void main(String[] args) {
new AlarmClock().launch(); // 启动主界面
}

@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source == btnSet) { // 点击设置按钮时弹出设置界面,以模对话框显示
setDialog.setVisible(true);
} else if(source == btnClose) { // 点击顶部确定按钮时隐藏顶部提示栏
stopAlarm();
}
}

private void initTimer() {
timer = new Timer(); // 初始化倒计时任务
// 开始倒计时
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY);
int min = cal.get(Calendar.MINUTE);
int sec = cal.get(Calendar.SECOND);
// 设置倒计时文本
labelClock.setText(String.format("%02d : %02d : %02d", hour, min, sec));
if(null != alarmCal && !timeReached) {
int alarmHour = alarmCal.get(Calendar.HOUR_OF_DAY);
int alarmMin = alarmCal.get(Calendar.MINUTE);
if(alarmHour == hour && alarmMin == min) { // 到时间时播放声音
timeReached = true;
System.out.println("Time over");
startAlarm();
}
}
}
}, 0, 1000L); // 每隔1秒刷新倒计时文本
}

/**
 * 开始计时
 * @param hour
 * @param minute
 */
public void startTimer(int hour, int minute) {
alarmCal = Calendar.getInstance();
alarmCal.set(Calendar.HOUR_OF_DAY, hour);
alarmCal.set(Calendar.MINUTE, minute);
labelNextAlarm.setText("下次闹钟时间:" + df.format(alarmCal.getTime()));
timeReached = false;
}

/**
 * 取消倒计时任务
 */
public void cancelTimer() {
labelNextAlarm.setText("");
alarmCal = null;
}

private void startAlarm() { // 开始播放提示音
if(null != clip) {
alarmPanel.setVisible(true); // 显示顶部提示栏
clip.setFramePosition(0); // 将音频帧重置为第0帧
clip.loop(LOOP_COUNT); // 开始循环播放
}
labelNextAlarm.setText("");
}
private void stopAlarm() { // 停止播放提示音
if(null != clip && clip.isRunning()) {
clip.stop(); // 结束播放
}
labelNextAlarm.setText("");
alarmPanel.setVisible(false); // 隐藏顶部提示栏
}

/**
 * 闹钟设置页面
 */
class SetDialog extends JDialog implements KeyListener, ActionListener {
private JLabel labelHour, labelMin;
private JTextField textHour, textMin;
private JPanel mainPanel, labelPanel, buttonPanel;
private JButton btnOk, btnCancel, btnBack;
private Calendar cal = Calendar.getInstance();

public SetDialog(Frame frame) {
super(frame);
setTitle("设置");
setModal(true); // 设置为模窗口,就是说在本弹窗未消失时不允许点击主界面。
setSize(300, 150);
// 显示时分
labelHour = new JLabel("时");
labelMin = new JLabel("分");
labelHour.setHorizontalAlignment(JLabel.CENTER);
labelMin.setHorizontalAlignment(JLabel.CENTER);
textHour = new JTextField();
textMin = new JTextField();
// 上面的部分用网格布局将各组件以2x2的格子放进去
labelPanel = new JPanel(new GridLayout(2, 2));
labelPanel.add(labelHour);
labelPanel.add(labelMin);
labelPanel.add(textHour);
labelPanel.add(textMin);
// 时分输入框添加按键监听,只允许输入数字
textHour.addKeyListener(this);
textMin.addKeyListener(this);

// 初始化按钮
btnOk = new JButton("确定");
btnCancel = new JButton("取消");
btnBack = new JButton("返回");
// 下面的按钮依次居中放进去
buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
buttonPanel.add(btnBack);
buttonPanel.add(btnCancel);
buttonPanel.add(btnOk);
// 初始化主面板,将主面板分割为上下两部分
mainPanel = new JPanel(new BorderLayout());
mainPanel.add(labelPanel, BorderLayout.CENTER); // 上面显示时分的组件
mainPanel.add(buttonPanel, BorderLayout.SOUTH); // 下面排列三个按钮
setContentPane(mainPanel);
// 设置按钮监听
btnBack.addActionListener(this);
btnOk.addActionListener(this);
btnCancel.addActionListener(this);

cal.add(Calendar.HOUR, 1); // 默认设置为当前时间加1小时的整点时间
cal.set(Calendar.MINUTE, 0);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int min = cal.get(Calendar.MINUTE);
textHour.setText(String.format("%02d", hour));
textMin.setText(String.format("%02d", min));
setLocationRelativeTo(frame);
}

@Override
public void keyPressed(KeyEvent arg0) {
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyTyped(KeyEvent e) {
int keyChar = e.getKeyChar();                 
            if(keyChar >= KeyEvent.VK_0 && keyChar <= KeyEvent.VK_9){
            }else{ // 如果输入的不是数字则屏蔽输入
                e.consume(); //关键,屏蔽掉非法输入  
            } 
}

@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source == btnOk) { // 如果点击了确定按钮,则开始计时
int hour = 0, min = 0;
try {
hour = Integer.parseInt(textHour.getText());
} catch (NumberFormatException e1) {
}
try {
min = Integer.parseInt(textMin.getText());
} catch (NumberFormatException e1) {
}
startTimer(hour, min);
setVisible(false);
} else if(source == btnCancel) { // 点击取消按钮时取消计时
cancelTimer();
setVisible(false);
} else if(source == btnBack) { // 点击返回按钮时什么也不做,直接关闭设置界面
setVisible(false);
}
}
}
}

用到的音频文件是wav格式的,你要注意mp3格式的是肯定不行的,其它格式行不行你可以自己试试。wav文件我传到附件上吧,你如果觉得太大的话也可以自己弄一个放到指定目录,记得重命名或修改代码,然后再重新编译运行。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-11
额,你很急着要么。。我倒是可以写一个啦。但是我在实习,就是白天没什么时间做了,晚上可以。。(我才不是为了什么财富值,我是为了锻炼自己,恩,哈哈)。。
第2个回答  2014-12-12
你好,我费了一上午才给你写完,请看代码:

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import java.applet.AudioClip;
//
public class WakeUp extends JApplet implements Runnable, ActionListener {
DteTimePanel dtTimePane = new DteTimePanel();//时间面盘
JLabel lblWakeUpTime = new JLabel("唤醒时间");//唤醒时间
JTextField txtWakeUpTime = new JTextField("20:33", 5);//文本设置要唤醒的时刻和次数
JTextField txtSound = new JTextField("train.wav");//声音文件
JTextField txtSrchRadio =
new JTextField("http://www.radio-locator.com/");
JComboBox cboxPickRadio = new JComboBox();
JButton btnStartStop = new JButton("Start");
JButton btnSrchRadio = new JButton("Find");
JButton btnPlayRadio = new JButton("Play");
JTextField txtStatusInfo = new JTextField("状态消息");

AudioClip alarmSound;
Thread thrSound;
int ckHour;
int ckMin;
Calendar ckDate;
boolean doCheck = false;

public void init() {
alarmSound = getAudioClip(getCodeBase(), txtSound.getText());
JPanel panOuter = new JPanel();
GridLayout gridlay1 = new GridLayout(3, 1);
panOuter.setLayout(gridlay1);

panOuter.add(dtTimePane);

JPanel panWakeUpTime = new JPanel();
FlowLayout flow1 = new FlowLayout(FlowLayout.LEFT);
panWakeUpTime.setLayout(flow1);
panWakeUpTime.add(lblWakeUpTime);
panWakeUpTime.add(txtWakeUpTime);

JPanel panButtons = new JPanel();
GridLayout gridlay2 = new GridLayout(1, 3);
panButtons.setLayout(gridlay2);
panButtons.add(btnSrchRadio);
panButtons.add(btnPlayRadio);
btnStartStop.addActionListener(this);
panButtons.add(btnStartStop);

JPanel panSetAlarmTime = new JPanel();
GridLayout gridlay3 = new GridLayout(2, 2);
panSetAlarmTime.setLayout(gridlay3);
panSetAlarmTime.add(panWakeUpTime);
panSetAlarmTime.add(panButtons);
panSetAlarmTime.add(txtSound);
panSetAlarmTime.add(txtSrchRadio);
panOuter.add(panSetAlarmTime);

cboxPickRadio.addItem("radio station 1");
cboxPickRadio.addItem("radio station 2");
cboxPickRadio.addItem("radio station 3");
cboxPickRadio.setEditable(true);

JPanel panBottom = new JPanel();
GridLayout gridlay4 = new GridLayout(2, 1);
panBottom.setLayout(gridlay4);
panBottom.add(cboxPickRadio);
panBottom.add(txtStatusInfo);
panOuter.add(panBottom);

setContentPane(panOuter);
repaint();
}

public void start() {
String s1 = txtWakeUpTime.getText();
ckHour = Integer.parseInt(s1.substring(0, 2));
ckMin = Integer.parseInt(s1.substring(3, 5));
ckDate = new GregorianCalendar();
Calendar cal = new GregorianCalendar();
int mm = cal.get(Calendar.MONTH);
int dd = cal.get(Calendar.DAY_OF_MONTH);
int yy = cal.get(Calendar.YEAR);
ckDate.set(yy, mm, dd, ckHour, ckMin, 00);
if (ckDate.compareTo(cal) < 0) ckDate.add(Calendar.DATE, 1);

if (thrSound == null) {
thrSound = new Thread(this);
thrSound.start();
}
}

public void stop() {
doCheck = false;
if (thrSound != null) {
if (alarmSound != null)
alarmSound.stop();
thrSound = null;
}
}

public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) { }

GregorianCalendar currtime = new GregorianCalendar();

if (doCheck)
if (ckDate.compareTo(currtime) < 0) {
runTheSound();
}
}
}

public void runTheSound() {
doCheck = false;
if (alarmSound != null)
alarmSound.loop();
}

public void actionPerformed(ActionEvent evt) {

if (evt.getSource().equals(btnStartStop)) {
if (btnStartStop.getText().equals("Start")) {
btnStartStop.setText("Stop");
txtStatusInfo.setText("Alarm process started");
doCheck = true;
start();
} else if (btnStartStop.getText().equals("Stop")) {
btnStartStop.setText("Start");
txtStatusInfo.setText("Alarm process has been stopped.");
stop();
}
}
}
}

class DteTimePanel extends JPanel {
String lastTime = "";

public void paint(Graphics screen) {
GregorianCalendar xday = new GregorianCalendar();
String xtime = xday.getTime().toString();

Color fgColor = new Color(40, 120, 160);
Font type = new Font("Monospaced", Font.BOLD, 20);
screen.setFont(type);
screen.setColor(getBackground());
screen.drawString(lastTime, 5, 15);
screen.setColor(fgColor);
screen.drawString(xtime, 5, 15);
lastTime = xtime;
repaint();
}
}

请记得采纳哦
第3个回答  2014-12-19

第4个回答  2014-12-10
下面的这个程序符合你的要求,你自己去看吧

http://wenku.baidu.com/link?url=aJrWgcrfjLbQcxAB35egU021PIVJILfgnVz-wWoTNwvEogQtcIqXbwMd3Gzap46p1ejrdhWDFqY9u8XpzrQ3ArCyNitspx-8AF1cb2CwzQ_追问

老师说了,有跟网上差不多的直接挂。。。

追答

谁会闲的没事编闹钟程序玩啊,你别说100肉,1000肉都没人愿意动

java 闹钟程序
setpanel.add(mlabel1); mlabel1.setText("分"); mlabel1.setBackground(backcolor); mlabel1.setForeground(Color.black); mlabel1.setBounds(fieldx+fieldw+3,fieldy1,14,20); fieldx=fieldx+space; \/\/当前时间的秒文本框的位置、大小 setpanel.add(showsec); showsec.setBounds(fieldx,fieldy1,fieldw...

跪求高手帮忙写一个JAVA手机闹钟程序 实现添加铃声和设置多闹钟
import java.util.*;import java.awt.*;import java.applet.*;import java.text.*;public class AlarmClock extends Applet implements Runnable{ Thread timer=null; \/\/创建线程timer Image clockp,gif1,gif2,clock6,clock7; \/\/clockp:闹钟的外壳,闹铃和报时鸟 int s,m,h,hh; AudioClip ipAu,danger,chirp...

Java建立一个闹钟厂,闹钟属性:形状、颜色、时间(设置为整型)闹钟行为...
import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.IOException;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Timer;import java.util.TimerTask;import javax.sound.sampled.AudioInputStream;import javax.sou...

有没有JAVA闹钟的小程序啊~不要太复杂,越简单越好啊~分大大的加啦!急...
import java.util.Calendar;import java.util.Date;import javax.swing.JFrame;import javax.swing.JOptionPane;public class Alert { public static void main(String args[]){ long time;String video=null;String msg=null;try{ \/\/设置 String strtime=JOptionPane.showInputDialog("输入时间:hh:mm"...

J2ME,在手机上能显示时间的闹钟程序
import java.text.*; import java.awt.event.*; public class Alarm extends Applet implements Runnable { Thread timer=null; \/\/创建线程timer Image gif1; \/\/clockp:闹钟的外壳,闹铃和报时物 boolean setflag=false,stopflag=false,cancelflag=false; Panel setpanel; \/\/获取声音文件 AudioClip ring=get...

java 写了一个闹钟程序程序 如何能直接运行。像安装好的软件那样?
对于一个简单的“Hello World”程序,可以使用命令行编译器进行编译,然后在终端或命令行界面直接运行。具体步骤如下:在电脑上安装Java开发环境,并配置环境变量。编写Hello World程序,并将其保存为源代码文件(如Java文件)。打开命令行界面,进入程序所在目录。使用javac命令进行编译,如"javac HelloWorld...

JAVA 编写时钟程序
给你一个只实现了时钟的面板。import java.util.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.Timer;public class Clock extends JFrame implements ActionListener { private static final long serialVersionUID = 6790815213225162093L;Timer timer;int x,y,...

用Java写一个闹钟 每天早上6点30响 怎么做
计时器,每分钟或每秒执行一次,获取当前系统时间,判断是 6.30 的话,响。。quartz 作业jar包。设定执行作业时间,设定执行内容,然后运行。其他作业实现。

java编写的万年历程序怎么加闹钟功能
import java.text.SimpleDateFormat;import java.util.Calendar;public class TestDate { public static final String[] weeks = { "日", "一", "二", "三", "四", "五", "六" };public static void main(String[] args) { Calendar c = Calendar.getInstance();c.set(Calendar.YEAR,...

用Android studio做一个可以运行的小程序,闹钟也行,然后可以连到手机...
1、时间选择对话框(TimePicker)2、获取闹钟管理器并对其进行设置 3、注册广播接收器 掌握了这两点,写程序就很简单了。1、新建android项目:Alarm,sdk版本选择2.2,Package name:com.lql.activity,Main Activity:Alarm 2、编写界面:直接修改layout中的main.xml文件,代码如下:Xml代码 <?xml version...

相似回答