java开发之闹钟的实现代码

项目结构:

效果图一:

效果图二:

效果图三:

关于闹钟:

代码如下:

Alarm hongten v1.0

使用说明:

此文件夹中包括:
             src文件夹       存放图片和声音文件夹,使用程序的时候,请不要删除此文件夹
             alarm.jar    主要的功能程序jar包(要求安装jdk1.5或以上版本)
             ReadMe.txt     说明文档

1.菜单功能说明

文件—— >   
           上传铃声(还没实现)
           退出                     功能:退出程序
     工具—— >   
           截图工具              功能:进行截图
           更改背景        功能:更改背景
     帮助—— >   
           关于程序        功能:查看程序说明

2.设置闹表

2.1.可以在响铃时间里设置闹表时间

2.2.还可以用快速设置,+1表示在系统时间的基础上增加一分钟,-1表示在系统时间的基础上减去一分钟                (+5,+30,-5,-30同样原理)

3.提示铃声

可以选择铃声类型,进行试听,试听是时候可以停止(该功能还没完善)

4.系统托盘

4.1.在主窗体隐藏的时候,单击左键,主窗体可以显示出来;

4.2.在主窗体隐藏的时候,单击右键,可以进行功能选择:退出,恢复主窗体可见,截图

4.3.在设置的闹表时间剩下30秒是时候,系统会自动提示信息(电脑右下角会弹出消息提示框)

4.4.在设置更改背景的时候,同样会弹出提示信息(所有的提示信息会自动隐退)

下面是代码部分

==========================================================

/Alarm/src/com/b510/main/AlarmMain.java


代码如下:

package com.b510.main;

import com.b510.ui.main.MyAlarm;

/**
  *
  * @author Hongten
  */
 public class AlarmMain {

public static void main(String[] args) {
         new MyAlarm("Alarm hongten v-1.0");
     }
 }

/Alarm/src/com/b510/menu/AlarmBackground.java


代码如下:

package com.b510.menu;

/**
  * @author Hongten
  *
  * @time 2012-3-4  2012
  */
 public class AlarmBackground {

/**
      * 默认的背景图片
      */
     private static String BACKGROUND_DEFAULT="src/image/background.png";
     /**
      * 水果系列
      */
     private static String BACKGROUND_FRUIT="src/image/background1.png";
     /**
      * 自行车系列
      */
     private static String BACKGROUND_BICK="src/image/background2.png";
     /**
      * 背景图片的list
      */
     private static String[] backgroundList={BACKGROUND_DEFAULT,BACKGROUND_FRUIT,BACKGROUND_BICK};
     /**
      * 获取背景图片的list的长度
      * @return 返回背景图片的list的长度
      */
     public static int getBackgroundListSize(){
         return backgroundList.length;
     }
     public static String getBackground(int bg){
         return backgroundList[bg];
     }
 }

/Alarm/src/com/b510/menu/AlarmFile.java


代码如下:

package com.b510.menu;

/**
  *
  * @author Hongten
  * 菜单-文件
  */
 public class AlarmFile {

/**
      * 退出程序
      */
     public static void exit(){
         System.exit(0);
     }
 }

/Alarm/src/com/b510/menu/AlarmHelp.java


代码如下:

/*
  * To change this template, choose Tools | Templates
  * and open the template in the editor.
  */
 package com.b510.menu;

import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;

import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JFrame;

import com.b510.ui.main.MyAlarm;

/**
  *
  * @author Hongten 菜单-帮助
  */
 public class AlarmHelp extends JFrame {

/**
      * 版本号
      */
     private static final long serialVersionUID = 5248482602468160509L;

public AlarmHelp(String title) {
         super(title);
         initComponents();
         addWindowListener(new WindowAdapter() {
             public void windowClosing(WindowEvent e) {
                 AlarmHelp.this.setVisible(false);
         }});
     }

/**
      *关闭按钮
      */
     private JButton closeButton = new JButton();
     /**
      * 应用程序名称
      */
     javax.swing.JLabel appTitleLabel = new javax.swing.JLabel();
     /**
      * 版本号 前
      */
     javax.swing.JLabel versionLabel = new javax.swing.JLabel();
     /**
      * 版本号
      */
     javax.swing.JLabel appVersionLabel = new javax.swing.JLabel();
     /**
      * 主页 前
      */
     javax.swing.JLabel homepageLabel = new javax.swing.JLabel();
     /**
      * Homepage
      */
     javax.swing.JLabel appHomepageLabel = new javax.swing.JLabel();
     /**
      * 说明
      */
     javax.swing.JLabel appDescLabel = new javax.swing.JLabel();
     /**
      * 图片
      */
     javax.swing.JLabel imageLabel = new javax.swing.JLabel();

private void initComponents() {

this.setVisible(true);
         // 设置大小不能变
         setResizable(false);
         this.setLocation(MyAlarm.pointX+60, MyAlarm.pointY+190);// 设置窗体的初始位置

closeButton.addMouseListener(new MouseAdapter() {
              public void mouseEntered(java.awt.event.MouseEvent evt) {
                    closeButton.setIcon(new ImageIcon("src/image/biao2.png"));
                 }
              public void mouseExited(MouseEvent evt){
                  closeButton.setIcon(new ImageIcon("src/image/biao.png"));
              }
         });

appTitleLabel.setFont(appTitleLabel.getFont().deriveFont(
                 appTitleLabel.getFont().getStyle() | java.awt.Font.BOLD,
                 appTitleLabel.getFont().getSize() + 4));
         appTitleLabel.setText("应用程序名称:"); // NOI18N
         appTitleLabel.setName("appTitleLabel"); // NOI18N

versionLabel.setFont(versionLabel.getFont().deriveFont(
                 versionLabel.getFont().getStyle() | java.awt.Font.BOLD));
         versionLabel.setText("版本号:"); // NOI18N
         versionLabel.setName("versionLabel"); // NOI18N

appVersionLabel.setText("1.0"); // NOI18N
         appVersionLabel.setName("appVersionLabel"); // NOI18N

homepageLabel.setFont(homepageLabel.getFont().deriveFont(
                 homepageLabel.getFont().getStyle() | java.awt.Font.BOLD));
         homepageLabel.setText("主页:"); // NOI18N
         homepageLabel.setName("homepageLabel"); // NOI18N

appHomepageLabel.setText("http://www.cnblogs.com/hongten"); // NOI18N
         appHomepageLabel.setName("appHomepageLabel"); // NOI18N

appDescLabel.setText("这是一个小应用程序,闹钟"); // NOI18N
         appDescLabel.setName("appDescLabel"); // NOI18N

imageLabel
                 .setIcon(new ImageIcon("src/image/about.png")); // NOI18N
         imageLabel.setName("imageLabel"); // NOI18N

closeButton
                 .setIcon(new ImageIcon("src/image/biao.png"));
         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
                 getContentPane());
         getContentPane().setLayout(layout);
         layout
                 .setHorizontalGroup(layout
                         .createParallelGroup(
                                 javax.swing.GroupLayout.Alignment.LEADING)
                         .addGroup(
                                 layout
                                         .createSequentialGroup()
                                         .addComponent(imageLabel)
                                         .addGap(18, 18, 18)
                                         .addGroup(
                                                 layout
                                                         .createParallelGroup(
                                                                 javax.swing.GroupLayout.Alignment.TRAILING)
                                                         .addGroup(
                                                                 javax.swing.GroupLayout.Alignment.LEADING,
                                                                 layout
                                                                         .createSequentialGroup()
                                                                         .addGroup(
                                                                                 layout
                                                                                         .createParallelGroup(
                                                                                                 javax.swing.GroupLayout.Alignment.LEADING)
                                                                                         .addComponent(
                                                                                                 versionLabel)
                                                                                         .addComponent(
                                                                                                 homepageLabel))
                                                                         .addPreferredGap(
                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                         .addGroup(
                                                                                 layout
                                                                                         .createParallelGroup(
                                                                                                 javax.swing.GroupLayout.Alignment.LEADING)
                                                                                         .addComponent(
                                                                                                 appVersionLabel)
                                                                                         .addComponent(
                                                                                                 appHomepageLabel)))
                                                         .addComponent(
                                                                 appTitleLabel,
                                                                 javax.swing.GroupLayout.Alignment.LEADING)
                                                         .addComponent(
                                                                 appDescLabel,
                                                                 javax.swing.GroupLayout.Alignment.LEADING,
                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                 266,
                                                                 Short.MAX_VALUE)
                                                         .addComponent(
                                                                 closeButton))
                                         .addContainerGap()));
         layout
                 .setVerticalGroup(layout
                         .createParallelGroup(
                                 javax.swing.GroupLayout.Alignment.LEADING)
                         .addComponent(imageLabel,
                                 javax.swing.GroupLayout.PREFERRED_SIZE,
                                 javax.swing.GroupLayout.DEFAULT_SIZE,
                                 Short.MAX_VALUE)
                         .addGroup(
                                 layout
                                         .createSequentialGroup()
                                         .addContainerGap()
                                         .addComponent(appTitleLabel)
                                         .addPreferredGap(
                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                         .addComponent(
                                                 appDescLabel,
                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
                                         .addPreferredGap(
                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                         .addGroup(
                                                 layout
                                                         .createParallelGroup(
                                                                 javax.swing.GroupLayout.Alignment.BASELINE)
                                                         .addComponent(
                                                                 versionLabel)
                                                         .addComponent(
                                                                 appVersionLabel))
                                         .addPreferredGap(
                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                         .addGroup(
                                                 layout
                                                         .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE))
                                         .addPreferredGap(
                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                         .addGroup(
                                                 layout
                                                         .createParallelGroup(
                                                                 javax.swing.GroupLayout.Alignment.BASELINE)
                                                         .addComponent(
                                                                 homepageLabel)
                                                         .addComponent(
                                                                 appHomepageLabel))
                                         .addPreferredGap(
                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED,
                                                 19, Short.MAX_VALUE)
                                         .addComponent(closeButton)
                                         .addContainerGap()));
         pack();
     }
 }

/Alarm/src/com/b510/menu/AlarmTools.java


代码如下:

/*
  * To change this template, choose Tools | Templates
  * and open the template in the editor.
  */

package com.b510.menu;

import mai.capture.DesktopCapture;

/**
  *
  * @author Hongten
  * 菜单-工具
  */
 public class AlarmTools {

/** 定义截图功能 */
     @SuppressWarnings("unused")
     private static DesktopCapture deskTopCapture;
     /**
      * 截图
      */
     public static void screenshot(){
         deskTopCapture=new DesktopCapture();
     }
 }

/Alarm/src/com/b510/ui/main/MyAlarm.java


代码如下:

package com.b510.ui.main;

import java.awt.Color;
 import java.awt.Graphics;
 import java.awt.Point;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.io.File;
 import java.io.IOException;
 import java.util.Calendar;

import javax.sound.sampled.AudioFormat;
 import javax.sound.sampled.AudioInputStream;
 import javax.sound.sampled.AudioSystem;
 import javax.sound.sampled.DataLine;
 import javax.sound.sampled.SourceDataLine;
 import javax.swing.ImageIcon;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;

import com.b510.menu.AlarmBackground;
 import com.b510.menu.AlarmFile;
 import com.b510.menu.AlarmHelp;
 import com.b510.menu.AlarmTools;

/**
  *
  * @author Hongten
  */
 public class MyAlarm extends JFrame implements ActionListener {

/**
      *+1
      */
     private javax.swing.JButton add1;
     /**
      * +30
      */
     private javax.swing.JButton add30;
     /**
      * +5
      */
     private javax.swing.JButton add5;
     /**
      * 时
      */
     private javax.swing.JComboBox dorp_down_hours;
     /**
      * 分
      */
     private javax.swing.JComboBox dorp_down_minute;
     /**
      * 秒
      */
     private javax.swing.JComboBox drop_down_second;
     /**
      * 试听
      */
     private javax.swing.JButton listening_test;
     /**
      * 试听-停止
      */
     private javax.swing.JButton listening_test_stop;
     /**
      * 主Panel
      */
     private javax.swing.JPanel mainPanel;
     /**
      * 菜单bar
      */
     private javax.swing.JMenuBar menuBar;
     /**
      * -1
      */
     private javax.swing.JButton minus1;
     /**
      * -30
      */
     private javax.swing.JButton minus30;
     /**
      * -5
      */
     private javax.swing.JButton minus5;
     /**
      * 当前时间
      */
     private javax.swing.JLabel now;
     /**
      * 铃声
      */
     private javax.swing.JComboBox ring_setup;
     /**
      * 截屏
      */
     private javax.swing.JMenuItem screenshot;
     /**
      * 更改背景图片
      */
     private javax.swing.JMenuItem changeBackground;
     /**
      * 停止
      */
     private javax.swing.JButton stop;
     /**
      * 工具
      */
     private javax.swing.JMenu tools;
     /**
      * 帮助
      */
     private javax.swing.JMenu help;
     /**
      * 关于
      */
     private javax.swing.JMenuItem about;
     /**
      * 退出
      */
     private javax.swing.JMenuItem exit;
     /**
      * 上传铃声
      */
     private javax.swing.JMenuItem uploadRing;
     /**
      * wenjian
      */
     private javax.swing.JMenu file;
     /**
      * 结果,即剩余时间
      */
     private JLabel result;
     /**
      * 分割线
      */
     private javax.swing.JSeparator line;
     /**
      * 变量-->小时
      */
     private String h;
     /**
      * 变量-->分钟
      */
     private String m;
     /**
      * 变量-->秒
      */
     private String s;
     /**
      * 线程的一个标志
      */
     private boolean running = true;
     /**
      * 定义图盘图盘标志
      */
     public boolean iconed = false;
     /**
      * 背景图片选择标志
      */
     private int background = 0;
     /**
      * 获取result的秒数
      */
     private int secondOfResult;
     /**
      * 更改背景图片的标志
      */
     private boolean flagOfBackground = false;
     /**
      * MyAlarm的X坐标
      */
     public static int pointX = 0;
     /**
      * MyAlarm的Y坐标
      */
     public static int pointY = 0;
     /** 定义托盘 */
     MyTray myTray;
     /**
      * 版本号
      */
     private static final long serialVersionUID = -6601825053136983041L;

public MyAlarm(String title) {
         this.setTitle(title);
         init();
     }

/**
      * 初始化背景图片
      */
     public void initMainPanel() {
         mainPanel = new JPanel() {
             private static final long serialVersionUID = 1L;

protected void paintComponent(Graphics g) {
                 ImageIcon icon = new ImageIcon(AlarmBackground
                         .getBackground(background));
                 g.drawImage(icon.getImage(), 0, 0, 545, 463, null);
             }
         };
     }

/**
      * 主界面初始化
      */
     public void init() {
         initMainPanel();
         now = new javax.swing.JLabel();
         stop = new javax.swing.JButton();
         add1 = new javax.swing.JButton();
         add5 = new javax.swing.JButton();
         add30 = new javax.swing.JButton();
         minus1 = new javax.swing.JButton();
         minus5 = new javax.swing.JButton();
         minus30 = new javax.swing.JButton();
         listening_test = new javax.swing.JButton();
         listening_test_stop = new javax.swing.JButton();
         dorp_down_hours = new javax.swing.JComboBox();
         dorp_down_minute = new javax.swing.JComboBox();
         drop_down_second = new javax.swing.JComboBox();
         ring_setup = new javax.swing.JComboBox();
         menuBar = new javax.swing.JMenuBar();
         file = new javax.swing.JMenu();
         uploadRing = new javax.swing.JMenuItem();
         exit = new javax.swing.JMenuItem();
         tools = new javax.swing.JMenu();
         screenshot = new javax.swing.JMenuItem();
         changeBackground = new javax.swing.JMenuItem();
         help = new javax.swing.JMenu();
         about = new javax.swing.JMenuItem();
         line = new javax.swing.JSeparator();
         result = new javax.swing.JLabel();

mainPanel.setName("mainPanel"); // NOI18N

result.setForeground(Color.RED);
         result.setName("result");
         result.setVisible(false);

now.setFont(now.getFont().deriveFont(
                 now.getFont().getStyle() | java.awt.Font.BOLD,
                 now.getFont().getSize() + 70));
         now.setName("now"); // NOI18N
         // 时间监听器,得到系统时间和设置好时间后,得到剩余时间
         timeListener();

stop.setText("stop"); // NOI18N
         stop.setName("stop"); // NOI18N
         // 初始化的时候是不可见的
         stop.setVisible(false);
         stop.addActionListener(this);

add1.setText("+1"); // NOI18N
         add1.setName("add1"); // NOI18N
         add1.addActionListener(this);

add5.setText("+5"); // NOI18N
         add5.setName("add5"); // NOI18N
         add5.addActionListener(this);

add30.setText("+30"); // NOI18N
         add30.setName("add30"); // NOI18N
         add30.addActionListener(this);

minus1.setText("-1"); // NOI18N
         minus1.setName("minus1"); // NOI18N
         minus1.addActionListener(this);

minus5.setText("-5"); // NOI18N
         minus5.setName("minus5"); // NOI18N
         minus5.addActionListener(this);

minus30.setText("-30"); // NOI18N
         minus30.setName("minus30"); // NOI18N
         minus30.addActionListener(this);

listening_test.setText("试听"); // NOI18N
         listening_test.setName("listening_test"); // NOI18N
         listening_test.addActionListener(this);

listening_test_stop.setText("停止"); // NOI18N
         listening_test_stop.setName("listening_test_stop"); // NOI18N
         listening_test_stop.addActionListener(this);

dorp_down_hours.setModel(new javax.swing.DefaultComboBoxModel(
                 new String[] { "关闭", "00", "01", "02", "03", "04", "05", "06",
                         "07", "08", "09", "10", "11", "12", "13", "14", "15",
                         "16", "17", "18", "19", "20", "21", "22", "23" }));
         dorp_down_hours.setName("dorp_down_hours"); // NOI18N
         dorp_down_hours.addActionListener(this);

dorp_down_minute.setModel(new javax.swing.DefaultComboBoxModel(
                 new String[] { "关闭", "00", "01", "02", "03", "04", "05", "06",
                         "07", "08", "09", "10", "11", "12", "13", "14", "15",
                         "16", "17", "18", "19", "20", "21", "22", "23", "24",
                         "25", "26", "27", "28", "29", "30", "31", "32", "33",
                         "34", "35", "36", "37", "38", "39", "40", "41", "42",
                         "43", "44", "45", "46", "47", "48", "49", "50", "51",
                         "52", "53", "54", "55", "56", "57", "58", "59" }));
         dorp_down_minute.setName("dorp_down_minute"); // NOI18N
         dorp_down_minute.addActionListener(this);

drop_down_second.setModel(new javax.swing.DefaultComboBoxModel(
                 new String[] { "关闭", "00", "01", "02", "03", "04", "05", "06",
                         "07", "08", "09", "10", "11", "12", "13", "14", "15",
                         "16", "17", "18", "19", "20", "21", "22", "23", "24",
                         "25", "26", "27", "28", "29", "30", "31", "32", "33",
                         "34", "35", "36", "37", "38", "39", "40", "41", "42",
                         "43", "44", "45", "46", "47", "48", "49", "50", "51",
                         "52", "53", "54", "55", "56", "57", "58", "59" }));
         drop_down_second.setName("drop_down_second"); // NOI18N
         drop_down_second.addActionListener(this);

ring_setup.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
                 "铃声一", "铃声二", "铃声三", "铃声四", "铃声五", "铃声六", "铃声七" }));
         ring_setup.setName("ring_setup"); // NOI18N
         // 主要的布局
         omponentLayout();

menuBar.setName("menuBar"); // NOI18N

file.setText("文件"); // NOI18N
         file.setName("file"); // NOI18N

uploadRing.setText("上传铃声"); // NOI18N
         uploadRing.setName("uploadRing"); // NOI18N
         uploadRing.addActionListener(this);
         file.add(uploadRing);

file.add(line);

exit.setText("退出");
         exit.setName("exit"); // NOI18N
         exit.addActionListener(this);
         file.add(exit);

menuBar.add(file);

tools.setText("工具"); // NOI18N
         tools.setName("tools"); // NOI18N

screenshot.setText("截图工具"); // NOI18N
         screenshot.setName("screenshot"); // NOI18N
         screenshot.addActionListener(this);
         tools.add(screenshot);

changeBackground.setText("更改背景");
         changeBackground.setName("changeBackground");
         changeBackground.addActionListener(this);
         tools.add(changeBackground);

menuBar.add(tools);

help.setText("帮助"); // NOI18N
         help.setName("help"); // NOI18N

about.setText("关于软件");
         about.setName("about"); // NOI18N
         about.addActionListener(this);
         help.add(about);

menuBar.add(help);

this.add(mainPanel);
         setJMenuBar(menuBar);

this.setVisible(true);
         this.setSize(550, 516);
         // this.pack();
         this.setLocationRelativeTo(null);
         this.setResizable(false);
         // this.setLocation(470, 250);
         // this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         // 当点击"-"最小化按钮时,系统会最小化到托盘
         addWindowListener(new WindowAdapter() {
             public void windowIconified(WindowEvent e) {
                 iconed = true;
                 setVisible(false);
             }

public void windowClosing(WindowEvent e) {
                 // 当点击"X"关闭窗口按钮时,会询问用户是否要最小化到托盘
                 // 是,表示最小化到托盘,否,表示退出
                 int option = JOptionPane.showConfirmDialog(MyAlarm.this,
                         "是否最小化到托盘?", "提示:", JOptionPane.YES_NO_OPTION);
                 if (option == JOptionPane.YES_OPTION) {
                     iconed = true;
                     MyAlarm.this.setVisible(false);
                 } else {
                     AlarmFile.exit();
                 }
             }
         });
         // 初始化自定义托盘
         myTray = new MyTray(MyAlarm.this);

}

/**
      * 组件的布局,不要轻易动啊
      */
     private void omponentLayout() {
         javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(
                 mainPanel);
         mainPanel.setLayout(mainPanelLayout);
         mainPanelLayout
                 .setHorizontalGroup(mainPanelLayout
                         .createParallelGroup(
                                 javax.swing.GroupLayout.Alignment.LEADING)
                         .addGroup(
                                 javax.swing.GroupLayout.Alignment.TRAILING,
                                 mainPanelLayout
                                         .createSequentialGroup()
                                         .addContainerGap(170, Short.MAX_VALUE)
                                         .addGroup(
                                                 mainPanelLayout
                                                         .createParallelGroup(
                                                                 javax.swing.GroupLayout.Alignment.LEADING)
                                                         .addGroup(
                                                                 mainPanelLayout
                                                                         .createSequentialGroup()
                                                                         .addComponent(
                                                                                 result)
                                                                         .addContainerGap())
                                                         .addGroup(
                                                                 javax.swing.GroupLayout.Alignment.TRAILING,
                                                                 mainPanelLayout
                                                                         .createParallelGroup(
                                                                                 javax.swing.GroupLayout.Alignment.LEADING)
                                                                         .addGroup(
                                                                                 mainPanelLayout
                                                                                         .createSequentialGroup()
                                                                                         .addComponent(
                                                                                                 now,
                                                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                                                 483,
                                                                                                 Short.MAX_VALUE)
                                                                                         .addContainerGap())
                                                                         .addGroup(
                                                                                 javax.swing.GroupLayout.Alignment.TRAILING,
                                                                                 mainPanelLayout
                                                                                         .createSequentialGroup()
                                                                                         .addGroup(
                                                                                                 mainPanelLayout
                                                                                                         .createParallelGroup(
                                                                                                                 javax.swing.GroupLayout.Alignment.LEADING)
                                                                                                         .addGroup(
                                                                                                                 mainPanelLayout
                                                                                                                         .createSequentialGroup()
                                                                                                                         .addComponent(
                                                                                                                                 dorp_down_hours,
                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
                                                                                                                                 74,
                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
                                                                                                                         .addPreferredGap(
                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                                                                         .addComponent(
                                                                                                                                 dorp_down_minute,
                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
                                                                                                                                 65,
                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
                                                                                                                         .addPreferredGap(
                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                                                                         .addComponent(
                                                                                                                                 drop_down_second,
                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
                                                                                                                                 62,
                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
                                                                                                                         .addPreferredGap(
                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                                                                         .addComponent(
                                                                                                                                 stop))
                                                                                                         .addGroup(
                                                                                                                 mainPanelLayout
                                                                                                                         .createSequentialGroup()
                                                                                                                         .addComponent(
                                                                                                                                 add1)
                                                                                                                         .addPreferredGap(
                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                                                                         .addComponent(
                                                                                                                                 add5)
                                                                                                                         .addPreferredGap(
                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                                                                         .addComponent(
                                                                                                                                 add30)
                                                                                                                         .addPreferredGap(
                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                                                                         .addComponent(
                                                                                                                                 minus1)
                                                                                                                         .addPreferredGap(
                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                                                                         .addComponent(
                                                                                                                                 minus5)
                                                                                                                         .addPreferredGap(
                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                                                                         .addComponent(
                                                                                                                                 minus30))
                                                                                                         .addGroup(
                                                                                                                 mainPanelLayout
                                                                                                                         .createSequentialGroup()
                                                                                                                         .addComponent(
                                                                                                                                 ring_setup,
                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
                                                                                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
                                                                                                                         .addPreferredGap(
                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                                                                         .addComponent(
                                                                                                                                 listening_test)
                                                                                                                         .addPreferredGap(
                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                                                                         .addComponent(
                                                                                                                                 listening_test_stop)))
                                                                                         .addGap(
                                                                                                 73,
                                                                                                 73,
                                                                                                 73))))));
         mainPanelLayout
                 .setVerticalGroup(mainPanelLayout
                         .createParallelGroup(
                                 javax.swing.GroupLayout.Alignment.LEADING)
                         .addGroup(
                                 javax.swing.GroupLayout.Alignment.TRAILING,
                                 mainPanelLayout
                                         .createSequentialGroup()
                                         .addGap(120, 120, 120)
                                         .addComponent(result)
                                         .addGap(24, 24, 24)
                                         .addComponent(
                                                 now,
                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
                                                 Short.MAX_VALUE)
                                         .addGap(36, 36, 36)
                                         .addGroup(
                                                 mainPanelLayout
                                                         .createParallelGroup(
                                                                 javax.swing.GroupLayout.Alignment.BASELINE)
                                                         .addComponent(
                                                                 dorp_down_hours,
                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
                                                         .addComponent(
                                                                 dorp_down_minute,
                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
                                                         .addComponent(
                                                                 drop_down_second,
                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
                                                         .addComponent(stop))
                                         .addPreferredGap(
                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                         .addGroup(
                                                 mainPanelLayout
                                                         .createParallelGroup(
                                                                 javax.swing.GroupLayout.Alignment.BASELINE)
                                                         .addComponent(add1)
                                                         .addComponent(add5)
                                                         .addComponent(add30)
                                                         .addComponent(minus1)
                                                         .addComponent(minus5)
                                                         .addComponent(minus30))
                                         .addGap(13, 13, 13)
                                         .addGroup(
                                                 mainPanelLayout
                                                         .createParallelGroup(
                                                                 javax.swing.GroupLayout.Alignment.BASELINE)
                                                         .addComponent(
                                                                 ring_setup,
                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
                                                         .addComponent(
                                                                 listening_test)
                                                         .addComponent(
                                                                 listening_test_stop))
                                         .addGap(58, 58, 58)));
     }

/**
      * 时间监听器,得到系统时间和设置好时间后,得到剩余时间
      */
     public void timeListener() {
         new Thread(new Runnable() {// 设置一个线程
                     public void run() {
                         while (true) {
                             try {
                                 Thread.sleep(1000);
                             } catch (Exception e) {
                                 e.printStackTrace();
                             }
                             initMainPanel();
                             now.setText(now());// 得到系统时间
                             result.setText(surplus_time());// 得到剩余时间
                         }
                     }
                 }).start();
     }

/**
      * 播放声音的监听器
      */
     public void myListener() {
         new Thread(new Runnable() {// 设置一个线程
                     public void run() {
                         while (true) {
                             try {
                                 Thread.sleep(1000);
                             } catch (Exception e) {
                                 e.printStackTrace();
                             }
                             executeSound();// 播放声音
                         }
                     }
                 }).start();
     }

/**
      * 获取返回结果
      *
      * @return result值
      */
     public String surplus_time() {
         String r = null;
         // 获取系统时,分,秒
         int h = getHour();
         int m = getMunite();
         int s = getSecond();
         // 获取设置的响铃时间
         int dh = 0;
         int dm = 0;
         int ds = 0;
         if (dorp_down_hours.getSelectedIndex() != 0) {
             dh = dorp_down_hours.getSelectedIndex() - 1;
         }
         if (dorp_down_minute.getSelectedIndex() != 0) {
             dm = dorp_down_minute.getSelectedIndex() - 1;
         }
         if (drop_down_second.getSelectedIndex() != 0) {
             ds = drop_down_second.getSelectedIndex() - 1;
         }
         int hour = dh - h;
         int min = dm - m;
         int sec = ds - s;
         if (hour == 0) {
             if (min == 0) {
                 if (sec == 0) {
                     r = "时间到了哦!";
                 }
                 if (sec < 0) {
                     hour += 23;
                     min += 59;
                     sec += 59;
                 }
             }
             if (min < 0) {
                 hour += 23;
                 if (sec < 0) {
                     min -= 1;
                     sec += 59;
                 }
                 min += 60;
             }
             if (min >= 0) {
                 if (sec < 0 || sec == 0) {
                     min -= 1;
                     sec += 59;
                 }
                 if (sec > 0) {
                     // sec=sec;
                 }
             }
         }
         if (hour < 0) {
             if (min <= 0) {
                 if (sec <= 0) {
                     hour -= 1;
                     min += 59;
                     sec += 59;
                 }
             }
             if (min > 0) {
                 if (sec <= 0) {
                     min -= 1;
                     sec += 59;
                 }
             }
             hour += 24;
         }
         if (hour > 0) {
             if (min == 0) {
                 if (sec <= 0) {
                     hour -= 1;
                     min += 59;
                     sec += 59;
                 }
             }
             if (min < 0) {
                 if (sec < 0) {
                     min -= 1;
                     sec += 59;
                 }
                 min += 60;
                 hour -= 1;
             }
             if (min > 0) {
                 if (sec < 0 || sec == 0) {
                     min -= 1;
                     sec += 59;
                 }
             }
         }

if (sec == 30 && min == 0 && hour == 0) {
             setSecondOfResult(sec);
         }
         r = new String("剩:" + hour + "时" + min + "分" + sec + "秒");
         if (hour == 0 && min == 0 && sec < 0) {
             r = "时间到了哦!";
         }
         // result.setText(r);
         return r;
     }

public int getSecondOfResult() {
         return secondOfResult;
     }

public void setSecondOfResult(int sec) {
         this.secondOfResult = sec;
     }

public boolean getFlagOfBackground() {
         return flagOfBackground;
     }

public void setFlagOfBackground(boolean flag) {
         this.flagOfBackground = flag;
     }

/**
      * 时间到了的时候就播放声音
      */
     public void executeSound() {
         // 获取系统时,分,秒
         int h = getHour();
         int m = getMunite();
         int s = getSecond();
         // 获取设置的响铃时间
         int dh = 0;
         int dm = 0;
         int ds = 0;
         if (dorp_down_hours.getSelectedIndex() != 0) {
             dh = dorp_down_hours.getSelectedIndex() - 1;
         }
         if (dorp_down_minute.getSelectedIndex() != 0) {
             dm = dorp_down_minute.getSelectedIndex() - 1;
         }
         if (drop_down_second.getSelectedIndex() != 0) {
             ds = drop_down_second.getSelectedIndex() - 1;
         }
         int hour = dh - h;
         int min = dm - m;
         int sec = ds - s;
         if (hour == 0 && min == 0 && sec == 0) {
             // 主窗体设置为可见
             setVisible(true);
             // 设置窗口前端显示
             setExtendedState(JFrame.NORMAL);
             setAlwaysOnTop(true);
             // 播放声音
             new Thread(new AlarmSound(ring_setup.getSelectedIndex())).start();
             // 震动
             shack();
         }
     }

/**
      * 得到系统时间当前时间,并返回
      *
      * @return 返回系统当前时间
      */
     public String now() {
         Calendar calendar = Calendar.getInstance();
         int hour = calendar.get(Calendar.HOUR_OF_DAY);
         int min = calendar.get(Calendar.MINUTE);
         int sec = calendar.get(Calendar.SECOND);
         // 小于10的时候,在前面加0
         String h = hour < 10 ? "0" : "";
         String m = min < 10 ? "0" : "";
         String s = sec < 10 ? "0" : "";
         String current = new String(h + hour + ":" + m + min + ":" + s + sec);
         return current;
     }

/**
      * 布局下面的按钮和下拉选项的监听器
      */
     @SuppressWarnings("deprecation")
     @Override
     public void actionPerformed(ActionEvent e) {

/**
          * 获取dorp_down_hours,dorp_down_minute,drop_down_second的值
          */
         if (e.getSource() == dorp_down_hours) {
             valueJudgment();
         }
         if (e.getSource() == dorp_down_minute) {
             valueJudgment();
         }
         if (e.getSource() == drop_down_second) {
             valueJudgment();
         }
         if (e.getSource() == stop) {
             stopActionPerformed();
         }
         if (e.getSource() == add1) {
             add1Action();
             myListener();
         }
         if (e.getSource() == add5) {
             add5Action();
             myListener();
         }
         if (e.getSource() == add30) {
             add30Action();
             myListener();
         }
         if (e.getSource() == minus1) {
             minus1Action();
             myListener();
         }
         if (e.getSource() == minus5) {
             minus5Action();
             myListener();
         }
         if (e.getSource() == minus30) {
             minus30Action();
             myListener();
         }
         AlarmSound alarmSound = new AlarmSound(ring_setup.getSelectedIndex());
         Thread alarmThread = new Thread(alarmSound);
         if (e.getSource() == listening_test) {
             // 试听
             if (!alarmThread.isAlive()) {
                 alarmThread.start();
             }
             if (running) {
                 alarmThread.resume();
             }
             listening_test.setEnabled(false);
         }
         if (e.getSource() == listening_test_stop) {
             // 停止试听
             listening_test.setEnabled(true);
             if (running) {
                 alarmThread.suspend();
             }
             running = !running;
         }
         if (e.getSource() == uploadRing) {
             // 上传文件
         }
         if (e.getSource() == exit) {
             // 退出程序
             AlarmFile.exit();
         }
         if (e.getSource() == screenshot) {
             // 主窗体隐藏
             iconed = true;
             MyAlarm.this.setVisible(false);
             // 开始截图
             AlarmTools.screenshot();
         }
         if (e.getSource() == changeBackground) {
             changeBG();
         }
         if (e.getSource() == about) {
             pointX = getMyAlarmX();
             pointY = getMyAlarmY();
             new AlarmHelp("关于程序");
         }
     }

/**
      * 更改背景图片</br> 当点击工具-- >更改背景,这里就可以处理更改背景图片
      */
     private void changeBG() {
         setFlagOfBackground(true);
         if (background < AlarmBackground.getBackgroundListSize()) {
             iconed = true;
             setVisible(false);
             if (background != AlarmBackground.getBackgroundListSize() - 1) {
                 ++background;
             } else {
                 background = 0;
             }
             initMainPanel();
         }
     }

/**
      * 点击-30按钮的时候执行的动作
      */
     private void minus30Action() {
         isHMSZero();
         if (dorp_down_minute.getSelectedIndex() - 30 < 0) {
             dorp_down_minute.setSelectedIndex(dorp_down_minute
                     .getSelectedIndex() + 30);// 60-30
             if (dorp_down_hours.getSelectedIndex() == 0) {
                 dorp_down_hours.setSelectedIndex(24);// 设置为23
             } else {
                 // 小时数-1
                 dorp_down_hours.setSelectedIndex(dorp_down_hours
                         .getSelectedIndex() - 1);
             }
         } else {
             // 分钟数-30
             dorp_down_minute.setSelectedIndex(dorp_down_minute
                     .getSelectedIndex() - 30);
         }
         valueJudgment();
     }

/**
      * 点击-5按钮的时候执行的动作
      */
     private void minus5Action() {
         isHMSZero();
         if (dorp_down_minute.getSelectedIndex() - 5 < 0) {
             dorp_down_minute.setSelectedIndex(dorp_down_minute
                     .getSelectedIndex() + 55);// 60-5
             if (dorp_down_hours.getSelectedIndex() == 0) {
                 dorp_down_hours.setSelectedIndex(24);// 设置为23
             } else {
                 // 小时数-1
                 dorp_down_hours.setSelectedIndex(dorp_down_hours
                         .getSelectedIndex() - 1);
             }
         } else {
             // 分钟数-5
             dorp_down_minute.setSelectedIndex(dorp_down_minute
                     .getSelectedIndex() - 5);
         }
         valueJudgment();
     }

/**
      * 点击-1按钮的时候执行的动作
      */
     private void minus1Action() {
         isHMSZero();
         if (dorp_down_minute.getSelectedIndex() - 1 == 0) {
             dorp_down_minute.setSelectedIndex(60);// 设置为59
             if (dorp_down_hours.getSelectedIndex() == 0) {
                 dorp_down_hours.setSelectedIndex(24);// 设置为23
             } else {
                 // 小时数-1
                 dorp_down_hours.setSelectedIndex(dorp_down_hours
                         .getSelectedIndex() - 1);
             }
         } else {
             // 分钟数-1
             dorp_down_minute.setSelectedIndex(dorp_down_minute
                     .getSelectedIndex() - 1);
         }
         valueJudgment();
     }

/**
      * 判断dorp_down_hours,dorp_down_minute,drop_down_second当前是否为0,即:"关闭"
      */
     private void isHMSZero() {
         // 如果小时数还没有设置,那么就设置为当前小时数
         if (dorp_down_hours.getSelectedIndex() == 0) {
             dorp_down_hours.setSelectedIndex(getHour() + 1);
         }
         // 如果分钟数还没有设置,那么就设置为当前分钟数
         if (dorp_down_minute.getSelectedIndex() == 0) {
             dorp_down_minute.setSelectedIndex(getMunite() + 1);
         }
         // 如果秒钟还没有设置,那么就设置为当前秒钟
         if (drop_down_second.getSelectedIndex() == 0) {
             drop_down_second.setSelectedIndex(getSecond());
         }
     }

/**
      * 点击+30按钮的时候执行的动作
      */
     private void add30Action() {
         isHMSZero();
         if (dorp_down_minute.getSelectedIndex() + 30 > 60) {
             dorp_down_minute.setSelectedIndex(dorp_down_minute
                     .getSelectedIndex() - 30);// +30-60
             if (dorp_down_hours.getSelectedIndex() > 23) {
                 dorp_down_hours.setSelectedIndex(1);// 设置为00
             } else {
                 // 小时数+1
                 dorp_down_hours.setSelectedIndex(dorp_down_hours
                         .getSelectedIndex() + 1);
             }
         } else {
             // 分钟数+30
             dorp_down_minute.setSelectedIndex(dorp_down_minute
                     .getSelectedIndex() + 30);
         }
         valueJudgment();
     }

/**
      * 点击+5按钮的时候执行的动作
      */
     private void add5Action() {
         isHMSZero();
         if (dorp_down_minute.getSelectedIndex() + 5 > 60) {
             dorp_down_minute.setSelectedIndex(dorp_down_minute
                     .getSelectedIndex() - 55);// +5-60
             if (dorp_down_hours.getSelectedIndex() > 23) {
                 dorp_down_hours.setSelectedIndex(1);// 设置为00
             } else {
                 // 小时数+1
                 dorp_down_hours.setSelectedIndex(dorp_down_hours
                         .getSelectedIndex() + 1);
             }
         } else {
             // 分钟数+5
             dorp_down_minute.setSelectedIndex(dorp_down_minute
                     .getSelectedIndex() + 5);
         }
         valueJudgment();
     }

/**
      * 点击+1按钮的时候执行的动作
      */
     private void add1Action() {
         isHMSZero();
         if (dorp_down_minute.getSelectedIndex() + 1 > 60) {
             dorp_down_minute.setSelectedIndex(1);// 设置为00
             if (dorp_down_hours.getSelectedIndex() > 23) {
                 dorp_down_hours.setSelectedIndex(1);// 设置为00
             } else {
                 // 小时数+1
                 dorp_down_hours.setSelectedIndex(dorp_down_hours
                         .getSelectedIndex() + 1);
             }
         } else {
             // 分钟数+1
             dorp_down_minute.setSelectedIndex(dorp_down_minute
                     .getSelectedIndex() + 1);
         }
         valueJudgment();
     }

/**
      * 给h,m,s三个变量赋值,并判断他们的值
      */
     private void valueJudgment() {
         h = dorp_down_hours.getSelectedItem().toString();
         m = dorp_down_minute.getSelectedItem().toString();
         s = drop_down_second.getSelectedItem().toString();
         hsmCheck();
     }

/**
      * 检查时,分,秒的值,如果都不是"关闭",那么</br>
      *
      * <li>stop按钮要显示出来</li><br/>
      * <li>result要显示出来剩余时间</li><br/>
      * <li>ring_setup要设置为不可用</li> <li>listening_test按钮为不可用</li> <li>
      * listening_test_stop按钮为不可用</li>
      */
     private void hsmCheck() {
         if (h != "关闭" && m != "关闭" && s != "关闭") {
             stop.setVisible(true);
             result.setVisible(true);
             ring_setup.setEnabled(false);
             listening_test.setEnabled(false);
             listening_test_stop.setEnabled(false);
         }
     }

/**
      * stop按钮的动作: <li>
      * 把dorp_down_hours,dorp_down_minute,drop_down_second的值设置为"关闭"</li> <li>
      * 隐藏result</li> <li>ring_setup设置为可用</li> <li>listening_test按钮为可用</li> <li>
      * listening_test_stop按钮为可用</li> <li>stop按钮设置为不可见</li><li>停止声音播放</li>
      */
     private void stopActionPerformed() {
         dorp_down_hours.setSelectedIndex(0);
         dorp_down_minute.setSelectedIndex(0);
         drop_down_second.setSelectedIndex(0);
         result.setVisible(false);
         ring_setup.setEnabled(true);
         listening_test.setEnabled(true);
         listening_test_stop.setEnabled(true);
         // 这里要停止声音
         stop.setVisible(false);
     }

/**
      * 获取当前小时数
      *
      * @return 返回当前小时数
      */
     private int getHour() {
         return Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
     }

/**
      * 获取当前分钟数
      *
      * @return 返回当前分钟数
      */
     private int getMunite() {
         return Calendar.getInstance().get(Calendar.MINUTE);
     }

/**
      * 获取当前秒钟数
      *
      * @return 返回当前秒钟数
      */
     private int getSecond() {
         return Calendar.getInstance().get(Calendar.SECOND);
     }

/**
      * 实现震动功能
      */
     public void shack() {
         Point p = MyAlarm.this.getLocation();
         int x = (int) p.getX();
         int y = (int) p.getY();
         for (int i = 0; i < 5000; i++) {
             MyAlarm.this.setLocation(x - 5, y);
             MyAlarm.this.setLocation(x, y + 5);
             MyAlarm.this.setLocation(x + 5, y);
             MyAlarm.this.setLocation(x, y - 5);
         }
         MyAlarm.this.setLocation(x, y);
     }

/**
      * 获取MyAlarm的X坐标
      *
      * @return 返回MyAlarm的X坐标
      */
     public int getMyAlarmX() {
         return (int) getLocation().getX();
     }

/**
      * 获取MyAlarm的Y坐标
      *
      * @return 返回MyAlarm的Y坐标
      */
     public int getMyAlarmY() {
         return (int) MyAlarm.this.getLocation().getY();
     }

/**
      * 闹铃类
      *
      * @author Hongten
      *
      * @time 2012-3-2 2012
      */
     class AlarmSound implements Runnable {
         private String temAlarm;
         private String alarm0Path = "src/image/sound/alarm0.wav";//
         private String alarm1Path = "src/image/sound/alarm1.wav";//
         private String alarm2Path = "src/image/sound/alarm2.wav";//
         private String alarm3Path = "src/image/sound/alarm3.wav";//
         private String alarm4Path = "src/image/sound/alarm4.wav";//
         private String alarm5Path = "src/image/sound/alarm5.wav";//
         private String alarm6Path = "src/image/sound/alarm6.wav";//
         private String alarm7Path = "src/image/sound/alarm7.wav";//
         private String alarm8Path = "src/image/sound/alarm8.wav";//

public AlarmSound(int a) {
             switch (a) {
             case 0:
                 temAlarm = alarm0Path;
                 break;
             case 1:
                 temAlarm = alarm1Path;
                 break;
             case 2:
                 temAlarm = alarm2Path;
                 break;
             case 3:
                 temAlarm = alarm3Path;
                 break;
             case 4:
                 temAlarm = alarm4Path;
                 break;
             case 5:
                 temAlarm = alarm5Path;
                 break;
             case 6:
                 temAlarm = alarm6Path;
                 break;
             case 7:
                 temAlarm = alarm7Path;
                 break;
             case 8:
                 temAlarm = alarm8Path;
                 break;
             }
         }

// 读取声音文件,并且播放出来
         public void run() {
             File soundFile = new File(temAlarm);
             AudioInputStream audioInputStream = null;
             try {
                 audioInputStream = AudioSystem.getAudioInputStream(soundFile);
             } catch (Exception e1) {
                 e1.printStackTrace();
                 return;
             }
             AudioFormat format = audioInputStream.getFormat();
             SourceDataLine auline = null;
             DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
             try {
                 auline = (SourceDataLine) AudioSystem.getLine(info);
                 auline.open(format);
             } catch (Exception e) {
                 e.printStackTrace();
                 return;
             }
             auline.start();
             int nBytesRead = 0;
             byte[] abData = new byte[512];
             try {
                 while (nBytesRead != -1) {
                     nBytesRead = audioInputStream
                             .read(abData, 0, abData.length);
                     if (nBytesRead >= 0)
                         auline.write(abData, 0, nBytesRead);
                 }
             } catch (IOException e) {
                 e.printStackTrace();
                 return;
             } finally {
                 auline.drain();
                 auline.close();
             }

}
     }
 }

/Alarm/src/com/b510/ui/main/MyTray.java


代码如下:

package com.b510.ui.main;

import java.awt.AWTException;
 import java.awt.Image;
 import java.awt.MenuItem;
 import java.awt.PopupMenu;
 import java.awt.SystemTray;
 import java.awt.TrayIcon;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
 import javax.swing.JFrame;

import com.b510.menu.AlarmFile;
 import com.b510.menu.AlarmTools;

public class MyTray implements ActionListener, MouseListener {
     private Image icon;// 图标
     private TrayIcon trayIcon;
     private SystemTray systemTray;// 系统托盘

private MyAlarm myAlarm; // 托盘所属主窗体
     private PopupMenu pop = new PopupMenu(); // 弹出菜单
     // 菜单选项
     /** 截图 */
     private MenuItem screenshot = new MenuItem("ScreenShot");
     /** 还原 */
     private MenuItem open = new MenuItem("Restore");
     /** 退出*/
     private MenuItem exit =new MenuItem("Exit");
     public MyTray(MyAlarm myAlarm) {
         this.myAlarm = myAlarm;
         // 得到托盘的图标
         icon = new ImageIcon(this.getClass().getClassLoader().getResource(
                 "image/mytray.png")).getImage();

if (SystemTray.isSupported()) {
             systemTray = SystemTray.getSystemTray();
             // 设置鼠标经过图标时,显示的内容
             trayIcon = new TrayIcon(icon, "open Alarm", pop);
             pop.add(screenshot);
             pop.add(open);
             pop.add(exit);
             // 添加系统托盘
             try {
                 systemTray.add(trayIcon);
             } catch (AWTException e1) {
                 e1.printStackTrace();
                 trayIcon.addMouseListener(this);
             }
         }
         displayInfoListener();
         trayIcon.addMouseListener(this);
         exit.addActionListener(this);
         open.addActionListener(this);
         screenshot.addActionListener(this);
     }

@Override
     public void actionPerformed(ActionEvent e) {
         if(e.getSource()==exit){
             //退出系统
             AlarmFile.exit();
         }else if (e.getSource() == open) {
             // 单点击菜单中的"还原"选项时,还原窗口
             //displayInfo();
             //trayIcon.displayMessage("温馨提示", "hello,world", TrayIcon.MessageType.INFO);
             myAlarm.iconed = false;
             friendListSet(true);

} else if (e.getSource() == screenshot) {
             // 但点击“截图”选项时,进行截图
             AlarmTools.screenshot();
         }
     }

@Override
     public void mouseClicked(MouseEvent e) {
         // 但鼠标点击一次的时候,进行弹出窗口
         if (e.getClickCount() == 1 && e.getButton() != MouseEvent.BUTTON3) {
             if (!myAlarm.isVisible()) {
                 friendListSet(true);
             } else {
                 friendListSet(false);
             }
         }
         // 但鼠标点击两次的时候,进行弹出窗口
         // 如果窗口有显示,则隐藏窗口,否则显示窗口
         if (e.getClickCount() == 2 && e.getButton() != MouseEvent.BUTTON3) {
             if (!myAlarm.isVisible()) {
                 friendListSet(true);
             } else {
                 friendListSet(false);
             }
         }
     }

/**
      * 设置friendList的可见性
      */
     private void friendListSet(boolean flag) {
         myAlarm.setVisible(true);
         myAlarm.setExtendedState(JFrame.NORMAL);
     }

public void displayInfoListener() {
         new Thread(new Runnable() {// 设置一个线程
                     public void run() {
                         while (true) {
                             try {
                                 Thread.sleep(1000);
                             } catch (Exception e) {
                                 e.printStackTrace();
                             }
                             if(myAlarm.getSecondOfResult()==30){
                                  trayIcon.displayMessage("温馨提示","距闹钟设置时间还剩:\n00 时 00 分 " +myAlarm.getSecondOfResult() + " 秒",TrayIcon.MessageType.INFO);
                                  myAlarm.setSecondOfResult(29);
                             }
                             if(myAlarm.getFlagOfBackground()){
                                 trayIcon.displayMessage("温馨提示","您已经更改了背景,点击托盘图标\n可以看到效果,右键托盘图标\n可以进行功能选择。",TrayIcon.MessageType.INFO);
                                 myAlarm.setFlagOfBackground(false);
                             }
                         }
                     }
                 }).start();
     }

@Override
     public void mouseEntered(MouseEvent arg0) {
         // TODO Auto-generated method stub

}

@Override
     public void mouseExited(MouseEvent arg0) {
         // TODO Auto-generated method stub

}

@Override
     public void mousePressed(MouseEvent arg0) {
         // TODO Auto-generated method stub

}

@Override
     public void mouseReleased(MouseEvent arg0) {
         // TODO Auto-generated method stub

}
 }

/Alarm/src/com/b510/ui/up/AlarmShowNow.java
package com.b510.ui.up;

import java.util.Calendar;

/**
  *
  * @author Hongten
  * 主界面区-显示现在的时间
  */
 public class AlarmShowNow {

/**
      * 获得系统的当前时间,并返回
      * @return 返回系统当前时间
      */
     public static String now() {
         Calendar cal = Calendar.getInstance();
         int hour = cal.get(Calendar.HOUR_OF_DAY);
         int min = cal.get(Calendar.MINUTE);
         int sec = cal.get(Calendar.SECOND);
         String current = new String(hour+ ":" + min + ":" + sec);
         return current;
     }
    public static void main(String args[]){
        System.out.println(now());
    }
 }

附件下载

(0)

相关推荐

  • 安卓应用开发通过java调用c++ jni的图文使用方法

    首先建议一个工程 HelloJni如下图: 按照默认的配置下一步,直到完成 . 如下图操作,点击windows菜单->Prefrence菜单: 弹出如下图:选择Andriod ->NDK: 配置完成以后,点击工程属性菜单: 做这一步的目的是,增加对c++代码的支持,他会自动生成一些东西,你会看到多一个jni的文件夹. 这个名字可以默认,就用工程的名字,实际上就是产生的c++代码生成.so文件的名称(windows上的dll文件). 完成以后.可以看代码,生成一个HelloJni的.cpp文件.

  • Java开发Oracle数据库连接JDBC Thin Driver 的三种方法

    Oracle的jdbc驱动三种主要分类: 1.JDBC OCI: oci是oracle call interface的缩写,此驱动类似于传统的ODBC 驱动.因为它需要Oracle Call Interface and Net8,所以它需要在运行使用此驱动的JAVA程序的机器上安装客户端软件,其实主要是用到orcale客户端里以dll方式提供的oci和服务器配置. 2.JDBC Thin: thin是for thin client的意思,这种驱动一般用在运行在WEB浏览器中的JAVA程序.它不是

  • 微信公众平台开发实战Java版之微信获取用户基本信息

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称.头像.性别.所在城市.语言和关注时间. 开发者可通过OpenID来获取用户基本信息.请使用https协议. 我们可以看看官方的文档:获取用户的基本信息. 接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/cgi-b

  • Linux系统下搭建Java开发环境

    一.下载 首先,当然是要下载了. 地址:www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 按照需要选择不同的版本. 二. 解压 将下载下来的 .tar.gz 文件解压. 使用如下命令解压: 复制代码 代码如下: sudo tar zxvf ./jdk-7u45-linux-x64.tar.gz 为了方便管理,可将解压后的文件移至另一个文件夹. 不做也行. 笔者将文件移至了 /opt/Java/

  • java微信公众号开发第一步 公众号接入和access_token管理

    本文就来说一说微信开发第一步,公众号接入以及access_token的管理. 一.微信公众号接入 在微信公众号开发手册上,关于公众号接入这一节内容还是写的比较详细的,文档中说接入公众号需要3个步骤,分别是: 1.填写服务器配置 2.验证服务器地址的有效性 3.依据接口文档实现业务逻辑 其实,第3步已经不能算做公众号接入的步骤,而是接入之后,开发人员可以根据微信公众号提供的接口所能做的一些开发. 第1步中服务器配置包含服务器地址(URL).Token和EncodingAESKey. 服务器地址即公

  • 搭建java WEB开发环境和应用

    一 使用Tomcat服务器,使用DBCP数据源搭建Web开发环境 1.JDK安装,默认路径即可 2.Tomcat5.5服务器 1)配置Tomcat的服务器端口: 打开D:\apache-tomcat-5.0.18\conf\server.xml, 查看如下代码: <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxThreads="

  • PHP和Java 集成开发详解分析 强强联合第1/4页

    时间一天天过去,这两个亮点也变得越来越亮,很快,它们受到了编程者的喜欢,于是有人有疑问了:要是它们两者相遇,会发生什么事情?有没有可能将它们的强项结合在一起呢? 尝试在PHP和Java之间搭建一座桥梁,利用这座桥梁在这两个实体之间建立起一个沟通渠道,在这座桥梁的帮助下,你可以在Java中开发类,然后在PHP中调用它们的方法,同样,在你的Java桌面或Web应用程序中也可以使用PHP脚本. 在这篇文章中,你将会学到如何: ◆安装和配置PHP/Java桥 ◆在PHP脚本中使用Java类 ◆在Java

  • Java 开发的几个注意点总结

    1. 将一些需要变动的配置写在属性文件中 比如,没有把一些需要并发执行时使用的线程数设置成可在属性文件中配置.那么你的程序无论在DEV环境中,还是TEST环境中,都可以顺畅无阻地运行,但是一旦部署在PROD上,把它作为多线程程序处理更大的数据集时,就会抛出IOException,原因也许是线上环境并发造成也许是其他.如果线程数目可以在属性文件中配置,那么使它成为一个单线程应用程序就变得十分容易了.我们不再需要为了解决问题而反复地部署和测试应用了.这种方法也同样适用于配置 URL.服务器和端口号等

  • Java开发者结合Node.js编程入门教程

    首先, 我必须得承认,作为一个有着十多年开发经验的java开发者,我已经形成了解决绝大部分问题的固有套路,尽管它们很多时候显得笨重和繁琐. 比如说如果要读取一个文件,那应该就是初始化一个BufferedReader 实例并传入一个FileReader,这几乎是顺理成章的,我在很多自认为算得上"企业级"的项目中编写这样的代码并且很享受这个过程,可以说我就是一个对其他语言不屑一顾的java脑残粉. 如果你正在阅读这篇博文,你可能已经陷入了我多年前早就陷入的一个误区,作为一名合格的开发人员应

  • java开发之读写txt文件操作的实现

    项目结构: 运行效果: ======================================================== 下面是代码部分: ======================================================== /Text/src/com/b510/txt/MyFile.java 复制代码 代码如下: package com.b510.txt; import java.io.BufferedReader; import java.io.F

随机推荐