三、程序源代码
import java.applet.Applet; import java.applet.AudioClip; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.*; import java.io.File;
import java.net.MalformedURLException; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.*;
class clock extends JFrame implements Runnable {
JLabel ri, shi, fen, miao, dangqian, guanji; JButton queding, dakai;
JTextField music, RI, SHI, FEN, MIAO; int h = 0, f = 0, m = 0, r = 0; boolean fo = false, foo = false; public AudioClip soumd1;
int riqi, shizhong, fenzhong, miaozhong; public clock() {
Container c = getContentPane(); c.setLayout(new GridLayout(4, 1)); JPanel jp = new JPanel(); dangqian = new JLabel(); jp.add(dangqian); c.add(jp);
JPanel jp3 = new JPanel();
guanji = new JLabel(\离闹铃时间:0日0时0分0秒\ jp3.add(guanji); c.add(jp3);
JPanel jp1 = new JPanel(); music = new JTextField(20);
dakai = new JButton(\选择闹铃音乐\ jp1.add(music); jp1.add(dakai); c.add(jp1);
ri = new JLabel(\日\ RI = new JTextField(4); shi = new JLabel(\时\ SHI = new JTextField(4); fen = new JLabel(\分\ FEN = new JTextField(4); miao = new JLabel(\秒\ MIAO = new JTextField(4); JPanel jp2 = new JPanel(); jp2.add(ri); jp2.add(RI); jp2.add(shi); jp2.add(SHI); jp2.add(fen); jp2.add(FEN); jp2.add(miao); jp2.add(MIAO);
queding = new JButton(\确定\
- 6 -
jp2.add(queding); c.add(jp2);
setSize(400, 160); setVisible(true);
dakai.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
fileChooser.setCurrentDirectory(new File(\ // 设置文件选择器当前目录
fileChooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File file) {
String name = file.getName().toLowerCase(); return name.endsWith(\ || name.endsWith(\ || file.isDirectory(); }
public String getDescription() {
return \音乐文件(*.wav,*.au)\ } });
if (fileChooser.showOpenDialog(clock.this) == JFileChooser.APPROVE_OPTION) {
String fileName = fileChooser.getSelectedFile() .getAbsolutePath(); music.setText(fileName); } } });
queding.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if (queding.getText().equals(\确定\ try {
h = Integer.parseInt(SHI.getText()); f = Integer.parseInt(FEN.getText()); m = Integer.parseInt(MIAO.getText());
if (1 <= h && h <= 31 && 0 <= h && h <= 23 && 0 <= f && f <= 59 && 0 <= m && m <= 59) { Date now = new Date();
SimpleDateFormat ri = new SimpleDateFormat(\ if (RI.getText() == null || RI.getText().equals(\ r = Integer.parseInt(ri.format(now)); RI.setText(ri.format(now)); } else
r = Integer.parseInt(RI.getText()); fo = true; } else
JOptionPane.showMessageDialog(null, \输入时间错误\ } catch (Exception e) {
JOptionPane.showMessageDialog(null, \请输入正确的时间\
- 7 -
}
} else { try{
fo = false;
RI.setEditable(true); SHI.setEditable(true); FEN.setEditable(true); MIAO.setEditable(true); queding.setText(\确定\ soumd1.stop();
}catch(Exception E) {
System.out.println(\关闭\ } } } }); }
public static void main(String agrs[]) {
clock s = new clock();
Thread t1 = new Thread(s); t1.start();
s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
public void run() { while (true) {
Date now = new Date();
dangqian.setText(\当前时间: \ if (foo) {
if (h == 0||h - shizhong<0) { h += 24; r = r - 1; }
if (f == 0||f - fenzhong<0) { f += 60; h -= 1; }
if (m == 0||m - miaozhong<0) { m += 60; f -= 1; }
guanji.setText(\离闹铃时间: \日\ + \时\分\秒\ if(r foo=false; guanji.setText(\离闹铃时间:0日0时0分0秒\ }else if(r<=riqi&&h foo=false; guanji.setText(\离闹铃时间:0日0时0分0秒\ }else if(r<=riqi&&h<=shizhong&&f foo=false; guanji.setText(\离闹铃时间:0日0时0分0秒\ }else if(r<=riqi&&h<=shizhong&&f<=fenzhong&&m - 8 - { foo=false; guanji.setText(\离闹铃时间:0日0时0分0秒\ } } if (fo) { foo = true; RI.setEditable(false); SHI.setEditable(false); FEN.setEditable(false); MIAO.setEditable(false); queding.setText(\关闭\ SimpleDateFormat ri = new SimpleDateFormat(\ SimpleDateFormat shi = new SimpleDateFormat(\ SimpleDateFormat fen = new SimpleDateFormat(\ SimpleDateFormat miao = new SimpleDateFormat(\ riqi = Integer.parseInt(ri.format(now)); shizhong = Integer.parseInt(shi.format(now)); fenzhong = Integer.parseInt(fen.format(now)); miaozhong = Integer.parseInt(miao.format(now)); if (riqi == r && shizhong == h && fenzhong == f && miaozhong == m) { try { soumd1 = Applet.newAudioClip(new File(music.getText()) .toURL()); 乐 soumd1.loop(); fo = false; foo = false; } catch (MalformedURLException e) { e.printStackTrace(); } } } try { Thread.sleep(1000); } catch (InterruptedException ie) { } } } } 四、运行结果截图 - 9 - // 播放音 打开文件添加音乐 闹钟设置完成 五、总结 本次JAVA课程设计是我和谢莉萍合作完成的,从网上下载了一个简单的小闹钟的开发程序,参照该程序代码,改编并添加一些自己的程序,在当前时间上加入了年月的显示,并在闹钟的时间设置上加入日的时间显示,最终实现小闹钟的运行.此小闹钟功能比较少,主要为能动态的显示当前时间,可设定或解除闹钟时间,并提供闹钟服务相应的文字提示功能,可以自己从本地文件中选择闹钟提示声音提示功能,并在闹钟设定的输入框中有简单的排错功能,比较简单. 该课程设计在修改运行过程中遇见很多问题,例如:添加日期时,显示一直不对,选择音乐时,音乐会出现播放不了的情况等等,但是,在两个人的努力下,经过修改,最终实现了小闹钟的运行.当然,由于是参照了别人的程序,依旧有好多程序语言不是很理解. 经过这次的课程设计,也有了很多收获,发现自己的整体面向对象的编程能力大大提高,虽然相对于以前的实验更复杂,不过加强了对GUI、线程等的程序的练习。由于这次课程设计安排的时间不是很足够,这个小闹钟软件比较简单,很多功能不是很完善,在很多功能上还需加强。虽然在设计的时候有遇到过很多困难和错误,但我觉得能够完成这次的课程设计,确实有了很大的进步与收获。 - 10 -