• java开发_闹钟


    项目结构:

    效果图一:

    效果图二:

    效果图三:

    关于闹钟:

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

     1 Alarm hongten v1.0
     2 
     3 使用说明:
     4 
     5     此文件夹中包括:
     6             src文件夹       存放图片和声音文件夹,使用程序的时候,请不要删除此文件夹
     7             alarm.jar    主要的功能程序jar包(要求安装jdk1.5或以上版本)
     8             ReadMe.txt     说明文档
     9     
    10 
    11 
    12  1.菜单功能说明
    13 
    14     文件—— >    
    15           上传铃声(还没实现)
    16           退出                     功能:退出程序
    17     工具—— >    
    18           截图工具              功能:进行截图
    19           更改背景        功能:更改背景
    20     帮助—— >    
    21           关于程序        功能:查看程序说明
    22 
    23 
    24  2.设置闹表
    25 
    26     2.1.可以在响铃时间里设置闹表时间
    27 
    28     2.2.还可以用快速设置,+1表示在系统时间的基础上增加一分钟,-1表示在系统时间的基础上减去一分钟                (+5,+30,-5,-30同样原理)
    29 
    30  3.提示铃声
    31 
    32     可以选择铃声类型,进行试听,试听是时候可以停止(该功能还没完善)
    33 
    34  4.系统托盘
    35 
    36     4.1.在主窗体隐藏的时候,单击左键,主窗体可以显示出来;
    37     
    38     4.2.在主窗体隐藏的时候,单击右键,可以进行功能选择:退出,恢复主窗体可见,截图
    39 
    40     4.3.在设置的闹表时间剩下30秒是时候,系统会自动提示信息(电脑右下角会弹出消息提示框)
    41 
    42     4.4.在设置更改背景的时候,同样会弹出提示信息(所有的提示信息会自动隐退)
    43 
    44  5.更多信息
    45 
    46     更多信息请访问:http://www.cnblogs.com/hongten
    47     QQ:648719819
    48     制作:hongten
    49 
    50 
    51 
    52 
    53           

    下面是代码部分

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

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

     1 package com.b510.main;
     2 
     3 import com.b510.ui.main.MyAlarm;
     4 
     5 /**
     6  * 
     7  * @author Hongten
     8  */
     9 public class AlarmMain {
    10 
    11     public static void main(String[] args) {
    12         new MyAlarm("Alarm hongten v-1.0");
    13     }
    14 }

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

     1 package com.b510.menu;
     2 
     3 /**
     4  * @author Hongten
     5  *
     6  * @time 2012-3-4  2012
     7  */
     8 public class AlarmBackground {
     9 
    10     /**
    11      * 默认的背景图片
    12      */
    13     private static String BACKGROUND_DEFAULT="src/image/background.png";
    14     /**
    15      * 水果系列
    16      */
    17     private static String BACKGROUND_FRUIT="src/image/background1.png";
    18     /**
    19      * 自行车系列
    20      */
    21     private static String BACKGROUND_BICK="src/image/background2.png";
    22     /**
    23      * 背景图片的list
    24      */
    25     private static String[] backgroundList={BACKGROUND_DEFAULT,BACKGROUND_FRUIT,BACKGROUND_BICK};
    26     /**
    27      * 获取背景图片的list的长度
    28      * @return 返回背景图片的list的长度
    29      */
    30     public static int getBackgroundListSize(){
    31         return backgroundList.length;
    32     }
    33     public static String getBackground(int bg){
    34         return backgroundList[bg];
    35     }
    36 }

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

     1 package com.b510.menu;
     2 
     3 /**
     4  *
     5  * @author Hongten
     6  * 菜单-文件
     7  */
     8 public class AlarmFile {
     9 
    10     /**
    11      * 退出程序
    12      */
    13     public static void exit(){
    14         System.exit(0);
    15     }
    16 }

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

      1 /*
      2  * To change this template, choose Tools | Templates
      3  * and open the template in the editor.
      4  */
      5 package com.b510.menu;
      6 
      7 import java.awt.event.MouseAdapter;
      8 import java.awt.event.MouseEvent;
      9 import java.awt.event.WindowAdapter;
     10 import java.awt.event.WindowEvent;
     11 
     12 import javax.swing.ImageIcon;
     13 import javax.swing.JButton;
     14 import javax.swing.JFrame;
     15 
     16 import com.b510.ui.main.MyAlarm;
     17 
     18 /**
     19  * 
     20  * @author Hongten 菜单-帮助
     21  */
     22 public class AlarmHelp extends JFrame {
     23 
     24     /**
     25      * 版本号
     26      */
     27     private static final long serialVersionUID = 5248482602468160509L;
     28 
     29     public AlarmHelp(String title) {
     30         super(title);
     31         initComponents();
     32         addWindowListener(new WindowAdapter() {
     33             public void windowClosing(WindowEvent e) {
     34                 AlarmHelp.this.setVisible(false);
     35         }});
     36     }
     37 
     38     /**
     39      *关闭按钮
     40      */
     41     private JButton closeButton = new JButton();
     42     /**
     43      * 应用程序名称
     44      */
     45     javax.swing.JLabel appTitleLabel = new javax.swing.JLabel();
     46     /**
     47      * 版本号 前
     48      */
     49     javax.swing.JLabel versionLabel = new javax.swing.JLabel();
     50     /**
     51      * 版本号
     52      */
     53     javax.swing.JLabel appVersionLabel = new javax.swing.JLabel();
     54     /**
     55      * 主页 前
     56      */
     57     javax.swing.JLabel homepageLabel = new javax.swing.JLabel();
     58     /**
     59      * Homepage
     60      */
     61     javax.swing.JLabel appHomepageLabel = new javax.swing.JLabel();
     62     /**
     63      * 说明
     64      */
     65     javax.swing.JLabel appDescLabel = new javax.swing.JLabel();
     66     /**
     67      * 图片
     68      */
     69     javax.swing.JLabel imageLabel = new javax.swing.JLabel();
     70 
     71 
     72     private void initComponents() {
     73 
     74         this.setVisible(true);
     75         // 设置大小不能变
     76         setResizable(false);
     77         this.setLocation(MyAlarm.pointX+60, MyAlarm.pointY+190);// 设置窗体的初始位置
     78         
     79         closeButton.addMouseListener(new MouseAdapter() {
     80              public void mouseEntered(java.awt.event.MouseEvent evt) {
     81                    closeButton.setIcon(new ImageIcon("src/image/biao2.png"));
     82                 }
     83              public void mouseExited(MouseEvent evt){
     84                  closeButton.setIcon(new ImageIcon("src/image/biao.png"));
     85              }
     86         });
     87 
     88         appTitleLabel.setFont(appTitleLabel.getFont().deriveFont(
     89                 appTitleLabel.getFont().getStyle() | java.awt.Font.BOLD,
     90                 appTitleLabel.getFont().getSize() + 4));
     91         appTitleLabel.setText("应用程序名称:"); // NOI18N
     92         appTitleLabel.setName("appTitleLabel"); // NOI18N
     93 
     94         versionLabel.setFont(versionLabel.getFont().deriveFont(
     95                 versionLabel.getFont().getStyle() | java.awt.Font.BOLD));
     96         versionLabel.setText("版本号:"); // NOI18N
     97         versionLabel.setName("versionLabel"); // NOI18N
     98 
     99         appVersionLabel.setText("1.0"); // NOI18N
    100         appVersionLabel.setName("appVersionLabel"); // NOI18N
    101 
    102         homepageLabel.setFont(homepageLabel.getFont().deriveFont(
    103                 homepageLabel.getFont().getStyle() | java.awt.Font.BOLD));
    104         homepageLabel.setText("主页:"); // NOI18N
    105         homepageLabel.setName("homepageLabel"); // NOI18N
    106 
    107         appHomepageLabel.setText("http://www.cnblogs.com/hongten"); // NOI18N
    108         appHomepageLabel.setName("appHomepageLabel"); // NOI18N
    109 
    110         appDescLabel.setText("这是一个小应用程序,闹钟"); // NOI18N
    111         appDescLabel.setName("appDescLabel"); // NOI18N
    112 
    113         imageLabel
    114                 .setIcon(new ImageIcon("src/image/about.png")); // NOI18N
    115         imageLabel.setName("imageLabel"); // NOI18N
    116 
    117         closeButton
    118                 .setIcon(new ImageIcon("src/image/biao.png"));
    119         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
    120                 getContentPane());
    121         getContentPane().setLayout(layout);
    122         layout
    123                 .setHorizontalGroup(layout
    124                         .createParallelGroup(
    125                                 javax.swing.GroupLayout.Alignment.LEADING)
    126                         .addGroup(
    127                                 layout
    128                                         .createSequentialGroup()
    129                                         .addComponent(imageLabel)
    130                                         .addGap(18, 18, 18)
    131                                         .addGroup(
    132                                                 layout
    133                                                         .createParallelGroup(
    134                                                                 javax.swing.GroupLayout.Alignment.TRAILING)
    135                                                         .addGroup(
    136                                                                 javax.swing.GroupLayout.Alignment.LEADING,
    137                                                                 layout
    138                                                                         .createSequentialGroup()
    139                                                                         .addGroup(
    140                                                                                 layout
    141                                                                                         .createParallelGroup(
    142                                                                                                 javax.swing.GroupLayout.Alignment.LEADING)
    143                                                                                         .addComponent(
    144                                                                                                 versionLabel)
    145                                                                                         .addComponent(
    146                                                                                                 homepageLabel))
    147                                                                         .addPreferredGap(
    148                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    149                                                                         .addGroup(
    150                                                                                 layout
    151                                                                                         .createParallelGroup(
    152                                                                                                 javax.swing.GroupLayout.Alignment.LEADING)
    153                                                                                         .addComponent(
    154                                                                                                 appVersionLabel)
    155                                                                                         .addComponent(
    156                                                                                                 appHomepageLabel)))
    157                                                         .addComponent(
    158                                                                 appTitleLabel,
    159                                                                 javax.swing.GroupLayout.Alignment.LEADING)
    160                                                         .addComponent(
    161                                                                 appDescLabel,
    162                                                                 javax.swing.GroupLayout.Alignment.LEADING,
    163                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
    164                                                                 266,
    165                                                                 Short.MAX_VALUE)
    166                                                         .addComponent(
    167                                                                 closeButton))
    168                                         .addContainerGap()));
    169         layout
    170                 .setVerticalGroup(layout
    171                         .createParallelGroup(
    172                                 javax.swing.GroupLayout.Alignment.LEADING)
    173                         .addComponent(imageLabel,
    174                                 javax.swing.GroupLayout.PREFERRED_SIZE,
    175                                 javax.swing.GroupLayout.DEFAULT_SIZE,
    176                                 Short.MAX_VALUE)
    177                         .addGroup(
    178                                 layout
    179                                         .createSequentialGroup()
    180                                         .addContainerGap()
    181                                         .addComponent(appTitleLabel)
    182                                         .addPreferredGap(
    183                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    184                                         .addComponent(
    185                                                 appDescLabel,
    186                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
    187                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
    188                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
    189                                         .addPreferredGap(
    190                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    191                                         .addGroup(
    192                                                 layout
    193                                                         .createParallelGroup(
    194                                                                 javax.swing.GroupLayout.Alignment.BASELINE)
    195                                                         .addComponent(
    196                                                                 versionLabel)
    197                                                         .addComponent(
    198                                                                 appVersionLabel))
    199                                         .addPreferredGap(
    200                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    201                                         .addGroup(
    202                                                 layout
    203                                                         .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE))
    204                                         .addPreferredGap(
    205                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    206                                         .addGroup(
    207                                                 layout
    208                                                         .createParallelGroup(
    209                                                                 javax.swing.GroupLayout.Alignment.BASELINE)
    210                                                         .addComponent(
    211                                                                 homepageLabel)
    212                                                         .addComponent(
    213                                                                 appHomepageLabel))
    214                                         .addPreferredGap(
    215                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED,
    216                                                 19, Short.MAX_VALUE)
    217                                         .addComponent(closeButton)
    218                                         .addContainerGap()));
    219         pack();
    220     }
    221 }

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

     1 /*
     2  * To change this template, choose Tools | Templates
     3  * and open the template in the editor.
     4  */
     5 
     6 package com.b510.menu;
     7 
     8 import mai.capture.DesktopCapture;
     9 
    10 /**
    11  *
    12  * @author Hongten
    13  * 菜单-工具
    14  */
    15 public class AlarmTools {
    16 
    17     /** 定义截图功能 */
    18     @SuppressWarnings("unused")
    19     private static DesktopCapture deskTopCapture;
    20     /**
    21      * 截图
    22      */
    23     public static void screenshot(){
    24         deskTopCapture=new DesktopCapture();
    25     }
    26 }

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

       1 package com.b510.ui.main;
       2 
       3 import java.awt.Color;
       4 import java.awt.Graphics;
       5 import java.awt.Point;
       6 import java.awt.event.ActionEvent;
       7 import java.awt.event.ActionListener;
       8 import java.awt.event.WindowAdapter;
       9 import java.awt.event.WindowEvent;
      10 import java.io.File;
      11 import java.io.IOException;
      12 import java.util.Calendar;
      13 
      14 import javax.sound.sampled.AudioFormat;
      15 import javax.sound.sampled.AudioInputStream;
      16 import javax.sound.sampled.AudioSystem;
      17 import javax.sound.sampled.DataLine;
      18 import javax.sound.sampled.SourceDataLine;
      19 import javax.swing.ImageIcon;
      20 import javax.swing.JFrame;
      21 import javax.swing.JLabel;
      22 import javax.swing.JOptionPane;
      23 import javax.swing.JPanel;
      24 
      25 import com.b510.menu.AlarmBackground;
      26 import com.b510.menu.AlarmFile;
      27 import com.b510.menu.AlarmHelp;
      28 import com.b510.menu.AlarmTools;
      29 
      30 /**
      31  * 
      32  * @author Hongten
      33  */
      34 public class MyAlarm extends JFrame implements ActionListener {
      35 
      36     /**
      37      *+1
      38      */
      39     private javax.swing.JButton add1;
      40     /**
      41      * +30
      42      */
      43     private javax.swing.JButton add30;
      44     /**
      45      * +5
      46      */
      47     private javax.swing.JButton add5;
      48     /**
      49      * 时
      50      */
      51     private javax.swing.JComboBox dorp_down_hours;
      52     /**
      53      * 分
      54      */
      55     private javax.swing.JComboBox dorp_down_minute;
      56     /**
      57      * 秒
      58      */
      59     private javax.swing.JComboBox drop_down_second;
      60     /**
      61      * 试听
      62      */
      63     private javax.swing.JButton listening_test;
      64     /**
      65      * 试听-停止
      66      */
      67     private javax.swing.JButton listening_test_stop;
      68     /**
      69      * 主Panel
      70      */
      71     private javax.swing.JPanel mainPanel;
      72     /**
      73      * 菜单bar
      74      */
      75     private javax.swing.JMenuBar menuBar;
      76     /**
      77      * -1
      78      */
      79     private javax.swing.JButton minus1;
      80     /**
      81      * -30
      82      */
      83     private javax.swing.JButton minus30;
      84     /**
      85      * -5
      86      */
      87     private javax.swing.JButton minus5;
      88     /**
      89      * 当前时间
      90      */
      91     private javax.swing.JLabel now;
      92     /**
      93      * 铃声
      94      */
      95     private javax.swing.JComboBox ring_setup;
      96     /**
      97      * 截屏
      98      */
      99     private javax.swing.JMenuItem screenshot;
     100     /**
     101      * 更改背景图片
     102      */
     103     private javax.swing.JMenuItem changeBackground;
     104     /**
     105      * 停止
     106      */
     107     private javax.swing.JButton stop;
     108     /**
     109      * 工具
     110      */
     111     private javax.swing.JMenu tools;
     112     /**
     113      * 帮助
     114      */
     115     private javax.swing.JMenu help;
     116     /**
     117      * 关于
     118      */
     119     private javax.swing.JMenuItem about;
     120     /**
     121      * 退出
     122      */
     123     private javax.swing.JMenuItem exit;
     124     /**
     125      * 上传铃声
     126      */
     127     private javax.swing.JMenuItem uploadRing;
     128     /**
     129      * wenjian
     130      */
     131     private javax.swing.JMenu file;
     132     /**
     133      * 结果,即剩余时间
     134      */
     135     private JLabel result;
     136     /**
     137      * 分割线
     138      */
     139     private javax.swing.JSeparator line;
     140     /**
     141      * 变量-->小时
     142      */
     143     private String h;
     144     /**
     145      * 变量-->分钟
     146      */
     147     private String m;
     148     /**
     149      * 变量-->秒
     150      */
     151     private String s;
     152     /**
     153      * 线程的一个标志
     154      */
     155     private boolean running = true;
     156     /**
     157      * 定义图盘图盘标志
     158      */
     159     public boolean iconed = false;
     160     /**
     161      * 背景图片选择标志
     162      */
     163     private int background = 0;
     164     /**
     165      * 获取result的秒数
     166      */
     167     private int secondOfResult;
     168     /**
     169      * 更改背景图片的标志
     170      */
     171     private boolean flagOfBackground = false;
     172     /**
     173      * MyAlarm的X坐标
     174      */
     175     public static int pointX = 0;
     176     /**
     177      * MyAlarm的Y坐标
     178      */
     179     public static int pointY = 0;
     180     /** 定义托盘 */
     181     MyTray myTray;
     182     /**
     183      * 版本号
     184      */
     185     private static final long serialVersionUID = -6601825053136983041L;
     186 
     187     public MyAlarm(String title) {
     188         this.setTitle(title);
     189         init();
     190     }
     191 
     192     /**
     193      * 初始化背景图片
     194      */
     195     public void initMainPanel() {
     196         mainPanel = new JPanel() {
     197             private static final long serialVersionUID = 1L;
     198 
     199             protected void paintComponent(Graphics g) {
     200                 ImageIcon icon = new ImageIcon(AlarmBackground
     201                         .getBackground(background));
     202                 g.drawImage(icon.getImage(), 0, 0, 545, 463, null);
     203             }
     204         };
     205     }
     206 
     207     /**
     208      * 主界面初始化
     209      */
     210     public void init() {
     211         initMainPanel();
     212         now = new javax.swing.JLabel();
     213         stop = new javax.swing.JButton();
     214         add1 = new javax.swing.JButton();
     215         add5 = new javax.swing.JButton();
     216         add30 = new javax.swing.JButton();
     217         minus1 = new javax.swing.JButton();
     218         minus5 = new javax.swing.JButton();
     219         minus30 = new javax.swing.JButton();
     220         listening_test = new javax.swing.JButton();
     221         listening_test_stop = new javax.swing.JButton();
     222         dorp_down_hours = new javax.swing.JComboBox();
     223         dorp_down_minute = new javax.swing.JComboBox();
     224         drop_down_second = new javax.swing.JComboBox();
     225         ring_setup = new javax.swing.JComboBox();
     226         menuBar = new javax.swing.JMenuBar();
     227         file = new javax.swing.JMenu();
     228         uploadRing = new javax.swing.JMenuItem();
     229         exit = new javax.swing.JMenuItem();
     230         tools = new javax.swing.JMenu();
     231         screenshot = new javax.swing.JMenuItem();
     232         changeBackground = new javax.swing.JMenuItem();
     233         help = new javax.swing.JMenu();
     234         about = new javax.swing.JMenuItem();
     235         line = new javax.swing.JSeparator();
     236         result = new javax.swing.JLabel();
     237 
     238         mainPanel.setName("mainPanel"); // NOI18N
     239 
     240         result.setForeground(Color.RED);
     241         result.setName("result");
     242         result.setVisible(false);
     243 
     244         now.setFont(now.getFont().deriveFont(
     245                 now.getFont().getStyle() | java.awt.Font.BOLD,
     246                 now.getFont().getSize() + 70));
     247         now.setName("now"); // NOI18N
     248         // 时间监听器,得到系统时间和设置好时间后,得到剩余时间
     249         timeListener();
     250 
     251         stop.setText("stop"); // NOI18N
     252         stop.setName("stop"); // NOI18N
     253         // 初始化的时候是不可见的
     254         stop.setVisible(false);
     255         stop.addActionListener(this);
     256 
     257         add1.setText("+1"); // NOI18N
     258         add1.setName("add1"); // NOI18N
     259         add1.addActionListener(this);
     260 
     261         add5.setText("+5"); // NOI18N
     262         add5.setName("add5"); // NOI18N
     263         add5.addActionListener(this);
     264 
     265         add30.setText("+30"); // NOI18N
     266         add30.setName("add30"); // NOI18N
     267         add30.addActionListener(this);
     268 
     269         minus1.setText("-1"); // NOI18N
     270         minus1.setName("minus1"); // NOI18N
     271         minus1.addActionListener(this);
     272 
     273         minus5.setText("-5"); // NOI18N
     274         minus5.setName("minus5"); // NOI18N
     275         minus5.addActionListener(this);
     276 
     277         minus30.setText("-30"); // NOI18N
     278         minus30.setName("minus30"); // NOI18N
     279         minus30.addActionListener(this);
     280 
     281         listening_test.setText("试听"); // NOI18N
     282         listening_test.setName("listening_test"); // NOI18N
     283         listening_test.addActionListener(this);
     284 
     285         listening_test_stop.setText("停止"); // NOI18N
     286         listening_test_stop.setName("listening_test_stop"); // NOI18N
     287         listening_test_stop.addActionListener(this);
     288 
     289         dorp_down_hours.setModel(new javax.swing.DefaultComboBoxModel(
     290                 new String[] { "关闭", "00", "01", "02", "03", "04", "05", "06",
     291                         "07", "08", "09", "10", "11", "12", "13", "14", "15",
     292                         "16", "17", "18", "19", "20", "21", "22", "23" }));
     293         dorp_down_hours.setName("dorp_down_hours"); // NOI18N
     294         dorp_down_hours.addActionListener(this);
     295 
     296         dorp_down_minute.setModel(new javax.swing.DefaultComboBoxModel(
     297                 new String[] { "关闭", "00", "01", "02", "03", "04", "05", "06",
     298                         "07", "08", "09", "10", "11", "12", "13", "14", "15",
     299                         "16", "17", "18", "19", "20", "21", "22", "23", "24",
     300                         "25", "26", "27", "28", "29", "30", "31", "32", "33",
     301                         "34", "35", "36", "37", "38", "39", "40", "41", "42",
     302                         "43", "44", "45", "46", "47", "48", "49", "50", "51",
     303                         "52", "53", "54", "55", "56", "57", "58", "59" }));
     304         dorp_down_minute.setName("dorp_down_minute"); // NOI18N
     305         dorp_down_minute.addActionListener(this);
     306 
     307         drop_down_second.setModel(new javax.swing.DefaultComboBoxModel(
     308                 new String[] { "关闭", "00", "01", "02", "03", "04", "05", "06",
     309                         "07", "08", "09", "10", "11", "12", "13", "14", "15",
     310                         "16", "17", "18", "19", "20", "21", "22", "23", "24",
     311                         "25", "26", "27", "28", "29", "30", "31", "32", "33",
     312                         "34", "35", "36", "37", "38", "39", "40", "41", "42",
     313                         "43", "44", "45", "46", "47", "48", "49", "50", "51",
     314                         "52", "53", "54", "55", "56", "57", "58", "59" }));
     315         drop_down_second.setName("drop_down_second"); // NOI18N
     316         drop_down_second.addActionListener(this);
     317 
     318         ring_setup.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
     319                 "铃声一", "铃声二", "铃声三", "铃声四", "铃声五", "铃声六", "铃声七" }));
     320         ring_setup.setName("ring_setup"); // NOI18N
     321         // 主要的布局
     322         omponentLayout();
     323 
     324         menuBar.setName("menuBar"); // NOI18N
     325 
     326         file.setText("文件"); // NOI18N
     327         file.setName("file"); // NOI18N
     328 
     329         uploadRing.setText("上传铃声"); // NOI18N
     330         uploadRing.setName("uploadRing"); // NOI18N
     331         uploadRing.addActionListener(this);
     332         file.add(uploadRing);
     333 
     334         file.add(line);
     335 
     336         exit.setText("退出");
     337         exit.setName("exit"); // NOI18N
     338         exit.addActionListener(this);
     339         file.add(exit);
     340 
     341         menuBar.add(file);
     342 
     343         tools.setText("工具"); // NOI18N
     344         tools.setName("tools"); // NOI18N
     345 
     346         screenshot.setText("截图工具"); // NOI18N
     347         screenshot.setName("screenshot"); // NOI18N
     348         screenshot.addActionListener(this);
     349         tools.add(screenshot);
     350 
     351         changeBackground.setText("更改背景");
     352         changeBackground.setName("changeBackground");
     353         changeBackground.addActionListener(this);
     354         tools.add(changeBackground);
     355 
     356         menuBar.add(tools);
     357 
     358         help.setText("帮助"); // NOI18N
     359         help.setName("help"); // NOI18N
     360 
     361         about.setText("关于软件");
     362         about.setName("about"); // NOI18N
     363         about.addActionListener(this);
     364         help.add(about);
     365 
     366         menuBar.add(help);
     367 
     368         this.add(mainPanel);
     369         setJMenuBar(menuBar);
     370 
     371         this.setVisible(true);
     372         this.setSize(550, 516);
     373         // this.pack();
     374         this.setLocationRelativeTo(null);
     375         this.setResizable(false);
     376         // this.setLocation(470, 250);
     377         // this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     378         // 当点击"-"最小化按钮时,系统会最小化到托盘
     379         addWindowListener(new WindowAdapter() {
     380             public void windowIconified(WindowEvent e) {
     381                 iconed = true;
     382                 setVisible(false);
     383             }
     384 
     385             public void windowClosing(WindowEvent e) {
     386                 // 当点击"X"关闭窗口按钮时,会询问用户是否要最小化到托盘
     387                 // 是,表示最小化到托盘,否,表示退出
     388                 int option = JOptionPane.showConfirmDialog(MyAlarm.this,
     389                         "是否最小化到托盘?", "提示:", JOptionPane.YES_NO_OPTION);
     390                 if (option == JOptionPane.YES_OPTION) {
     391                     iconed = true;
     392                     MyAlarm.this.setVisible(false);
     393                 } else {
     394                     AlarmFile.exit();
     395                 }
     396             }
     397         });
     398         // 初始化自定义托盘
     399         myTray = new MyTray(MyAlarm.this);
     400 
     401     }
     402 
     403     /**
     404      * 组件的布局,不要轻易动啊
     405      */
     406     private void omponentLayout() {
     407         javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(
     408                 mainPanel);
     409         mainPanel.setLayout(mainPanelLayout);
     410         mainPanelLayout
     411                 .setHorizontalGroup(mainPanelLayout
     412                         .createParallelGroup(
     413                                 javax.swing.GroupLayout.Alignment.LEADING)
     414                         .addGroup(
     415                                 javax.swing.GroupLayout.Alignment.TRAILING,
     416                                 mainPanelLayout
     417                                         .createSequentialGroup()
     418                                         .addContainerGap(170, Short.MAX_VALUE)
     419                                         .addGroup(
     420                                                 mainPanelLayout
     421                                                         .createParallelGroup(
     422                                                                 javax.swing.GroupLayout.Alignment.LEADING)
     423                                                         .addGroup(
     424                                                                 mainPanelLayout
     425                                                                         .createSequentialGroup()
     426                                                                         .addComponent(
     427                                                                                 result)
     428                                                                         .addContainerGap())
     429                                                         .addGroup(
     430                                                                 javax.swing.GroupLayout.Alignment.TRAILING,
     431                                                                 mainPanelLayout
     432                                                                         .createParallelGroup(
     433                                                                                 javax.swing.GroupLayout.Alignment.LEADING)
     434                                                                         .addGroup(
     435                                                                                 mainPanelLayout
     436                                                                                         .createSequentialGroup()
     437                                                                                         .addComponent(
     438                                                                                                 now,
     439                                                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
     440                                                                                                 483,
     441                                                                                                 Short.MAX_VALUE)
     442                                                                                         .addContainerGap())
     443                                                                         .addGroup(
     444                                                                                 javax.swing.GroupLayout.Alignment.TRAILING,
     445                                                                                 mainPanelLayout
     446                                                                                         .createSequentialGroup()
     447                                                                                         .addGroup(
     448                                                                                                 mainPanelLayout
     449                                                                                                         .createParallelGroup(
     450                                                                                                                 javax.swing.GroupLayout.Alignment.LEADING)
     451                                                                                                         .addGroup(
     452                                                                                                                 mainPanelLayout
     453                                                                                                                         .createSequentialGroup()
     454                                                                                                                         .addComponent(
     455                                                                                                                                 dorp_down_hours,
     456                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
     457                                                                                                                                 74,
     458                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
     459                                                                                                                         .addPreferredGap(
     460                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
     461                                                                                                                         .addComponent(
     462                                                                                                                                 dorp_down_minute,
     463                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
     464                                                                                                                                 65,
     465                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
     466                                                                                                                         .addPreferredGap(
     467                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
     468                                                                                                                         .addComponent(
     469                                                                                                                                 drop_down_second,
     470                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
     471                                                                                                                                 62,
     472                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
     473                                                                                                                         .addPreferredGap(
     474                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
     475                                                                                                                         .addComponent(
     476                                                                                                                                 stop))
     477                                                                                                         .addGroup(
     478                                                                                                                 mainPanelLayout
     479                                                                                                                         .createSequentialGroup()
     480                                                                                                                         .addComponent(
     481                                                                                                                                 add1)
     482                                                                                                                         .addPreferredGap(
     483                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
     484                                                                                                                         .addComponent(
     485                                                                                                                                 add5)
     486                                                                                                                         .addPreferredGap(
     487                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
     488                                                                                                                         .addComponent(
     489                                                                                                                                 add30)
     490                                                                                                                         .addPreferredGap(
     491                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
     492                                                                                                                         .addComponent(
     493                                                                                                                                 minus1)
     494                                                                                                                         .addPreferredGap(
     495                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
     496                                                                                                                         .addComponent(
     497                                                                                                                                 minus5)
     498                                                                                                                         .addPreferredGap(
     499                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
     500                                                                                                                         .addComponent(
     501                                                                                                                                 minus30))
     502                                                                                                         .addGroup(
     503                                                                                                                 mainPanelLayout
     504                                                                                                                         .createSequentialGroup()
     505                                                                                                                         .addComponent(
     506                                                                                                                                 ring_setup,
     507                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
     508                                                                                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
     509                                                                                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
     510                                                                                                                         .addPreferredGap(
     511                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
     512                                                                                                                         .addComponent(
     513                                                                                                                                 listening_test)
     514                                                                                                                         .addPreferredGap(
     515                                                                                                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
     516                                                                                                                         .addComponent(
     517                                                                                                                                 listening_test_stop)))
     518                                                                                         .addGap(
     519                                                                                                 73,
     520                                                                                                 73,
     521                                                                                                 73))))));
     522         mainPanelLayout
     523                 .setVerticalGroup(mainPanelLayout
     524                         .createParallelGroup(
     525                                 javax.swing.GroupLayout.Alignment.LEADING)
     526                         .addGroup(
     527                                 javax.swing.GroupLayout.Alignment.TRAILING,
     528                                 mainPanelLayout
     529                                         .createSequentialGroup()
     530                                         .addGap(120, 120, 120)
     531                                         .addComponent(result)
     532                                         .addGap(24, 24, 24)
     533                                         .addComponent(
     534                                                 now,
     535                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
     536                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
     537                                                 Short.MAX_VALUE)
     538                                         .addGap(36, 36, 36)
     539                                         .addGroup(
     540                                                 mainPanelLayout
     541                                                         .createParallelGroup(
     542                                                                 javax.swing.GroupLayout.Alignment.BASELINE)
     543                                                         .addComponent(
     544                                                                 dorp_down_hours,
     545                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
     546                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
     547                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
     548                                                         .addComponent(
     549                                                                 dorp_down_minute,
     550                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
     551                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
     552                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
     553                                                         .addComponent(
     554                                                                 drop_down_second,
     555                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
     556                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
     557                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
     558                                                         .addComponent(stop))
     559                                         .addPreferredGap(
     560                                                 javax.swing.LayoutStyle.ComponentPlacement.RELATED)
     561                                         .addGroup(
     562                                                 mainPanelLayout
     563                                                         .createParallelGroup(
     564                                                                 javax.swing.GroupLayout.Alignment.BASELINE)
     565                                                         .addComponent(add1)
     566                                                         .addComponent(add5)
     567                                                         .addComponent(add30)
     568                                                         .addComponent(minus1)
     569                                                         .addComponent(minus5)
     570                                                         .addComponent(minus30))
     571                                         .addGap(13, 13, 13)
     572                                         .addGroup(
     573                                                 mainPanelLayout
     574                                                         .createParallelGroup(
     575                                                                 javax.swing.GroupLayout.Alignment.BASELINE)
     576                                                         .addComponent(
     577                                                                 ring_setup,
     578                                                                 javax.swing.GroupLayout.PREFERRED_SIZE,
     579                                                                 javax.swing.GroupLayout.DEFAULT_SIZE,
     580                                                                 javax.swing.GroupLayout.PREFERRED_SIZE)
     581                                                         .addComponent(
     582                                                                 listening_test)
     583                                                         .addComponent(
     584                                                                 listening_test_stop))
     585                                         .addGap(58, 58, 58)));
     586     }
     587 
     588     /**
     589      * 时间监听器,得到系统时间和设置好时间后,得到剩余时间
     590      */
     591     public void timeListener() {
     592         new Thread(new Runnable() {// 设置一个线程
     593                     public void run() {
     594                         while (true) {
     595                             try {
     596                                 Thread.sleep(1000);
     597                             } catch (Exception e) {
     598                                 e.printStackTrace();
     599                             }
     600                             initMainPanel();
     601                             now.setText(now());// 得到系统时间
     602                             result.setText(surplus_time());// 得到剩余时间
     603                         }
     604                     }
     605                 }).start();
     606     }
     607 
     608     /**
     609      * 播放声音的监听器
     610      */
     611     public void myListener() {
     612         new Thread(new Runnable() {// 设置一个线程
     613                     public void run() {
     614                         while (true) {
     615                             try {
     616                                 Thread.sleep(1000);
     617                             } catch (Exception e) {
     618                                 e.printStackTrace();
     619                             }
     620                             executeSound();// 播放声音
     621                         }
     622                     }
     623                 }).start();
     624     }
     625 
     626     /**
     627      * 获取返回结果
     628      * 
     629      * @return result值
     630      */
     631     public String surplus_time() {
     632         String r = null;
     633         // 获取系统时,分,秒
     634         int h = getHour();
     635         int m = getMunite();
     636         int s = getSecond();
     637         // 获取设置的响铃时间
     638         int dh = 0;
     639         int dm = 0;
     640         int ds = 0;
     641         if (dorp_down_hours.getSelectedIndex() != 0) {
     642             dh = dorp_down_hours.getSelectedIndex() - 1;
     643         }
     644         if (dorp_down_minute.getSelectedIndex() != 0) {
     645             dm = dorp_down_minute.getSelectedIndex() - 1;
     646         }
     647         if (drop_down_second.getSelectedIndex() != 0) {
     648             ds = drop_down_second.getSelectedIndex() - 1;
     649         }
     650         int hour = dh - h;
     651         int min = dm - m;
     652         int sec = ds - s;
     653         if (hour == 0) {
     654             if (min == 0) {
     655                 if (sec == 0) {
     656                     r = "时间到了哦!";
     657                 }
     658                 if (sec < 0) {
     659                     hour += 23;
     660                     min += 59;
     661                     sec += 59;
     662                 }
     663             }
     664             if (min < 0) {
     665                 hour += 23;
     666                 if (sec < 0) {
     667                     min -= 1;
     668                     sec += 59;
     669                 }
     670                 min += 60;
     671             }
     672             if (min >= 0) {
     673                 if (sec < 0 || sec == 0) {
     674                     min -= 1;
     675                     sec += 59;
     676                 }
     677                 if (sec > 0) {
     678                     // sec=sec;
     679                 }
     680             }
     681         }
     682         if (hour < 0) {
     683             if (min <= 0) {
     684                 if (sec <= 0) {
     685                     hour -= 1;
     686                     min += 59;
     687                     sec += 59;
     688                 }
     689             }
     690             if (min > 0) {
     691                 if (sec <= 0) {
     692                     min -= 1;
     693                     sec += 59;
     694                 }
     695             }
     696             hour += 24;
     697         }
     698         if (hour > 0) {
     699             if (min == 0) {
     700                 if (sec <= 0) {
     701                     hour -= 1;
     702                     min += 59;
     703                     sec += 59;
     704                 }
     705             }
     706             if (min < 0) {
     707                 if (sec < 0) {
     708                     min -= 1;
     709                     sec += 59;
     710                 }
     711                 min += 60;
     712                 hour -= 1;
     713             }
     714             if (min > 0) {
     715                 if (sec < 0 || sec == 0) {
     716                     min -= 1;
     717                     sec += 59;
     718                 }
     719             }
     720         }
     721 
     722         if (sec == 30 && min == 0 && hour == 0) {
     723             setSecondOfResult(sec);
     724         }
     725         r = new String("剩:" + hour + "时" + min + "分" + sec + "秒");
     726         if (hour == 0 && min == 0 && sec < 0) {
     727             r = "时间到了哦!";
     728         }
     729         // result.setText(r);
     730         return r;
     731     }
     732 
     733     public int getSecondOfResult() {
     734         return secondOfResult;
     735     }
     736 
     737     public void setSecondOfResult(int sec) {
     738         this.secondOfResult = sec;
     739     }
     740 
     741     public boolean getFlagOfBackground() {
     742         return flagOfBackground;
     743     }
     744 
     745     public void setFlagOfBackground(boolean flag) {
     746         this.flagOfBackground = flag;
     747     }
     748 
     749     /**
     750      * 时间到了的时候就播放声音
     751      */
     752     public void executeSound() {
     753         // 获取系统时,分,秒
     754         int h = getHour();
     755         int m = getMunite();
     756         int s = getSecond();
     757         // 获取设置的响铃时间
     758         int dh = 0;
     759         int dm = 0;
     760         int ds = 0;
     761         if (dorp_down_hours.getSelectedIndex() != 0) {
     762             dh = dorp_down_hours.getSelectedIndex() - 1;
     763         }
     764         if (dorp_down_minute.getSelectedIndex() != 0) {
     765             dm = dorp_down_minute.getSelectedIndex() - 1;
     766         }
     767         if (drop_down_second.getSelectedIndex() != 0) {
     768             ds = drop_down_second.getSelectedIndex() - 1;
     769         }
     770         int hour = dh - h;
     771         int min = dm - m;
     772         int sec = ds - s;
     773         if (hour == 0 && min == 0 && sec == 0) {
     774             // 主窗体设置为可见
     775             setVisible(true);
     776             // 设置窗口前端显示
     777             setExtendedState(JFrame.NORMAL);
     778             setAlwaysOnTop(true);
     779             // 播放声音
     780             new Thread(new AlarmSound(ring_setup.getSelectedIndex())).start();
     781             // 震动
     782             shack();
     783         }
     784     }
     785 
     786     /**
     787      * 得到系统时间当前时间,并返回
     788      * 
     789      * @return 返回系统当前时间
     790      */
     791     public String now() {
     792         Calendar calendar = Calendar.getInstance();
     793         int hour = calendar.get(Calendar.HOUR_OF_DAY);
     794         int min = calendar.get(Calendar.MINUTE);
     795         int sec = calendar.get(Calendar.SECOND);
     796         // 小于10的时候,在前面加0
     797         String h = hour < 10 ? "0" : "";
     798         String m = min < 10 ? "0" : "";
     799         String s = sec < 10 ? "0" : "";
     800         String current = new String(h + hour + ":" + m + min + ":" + s + sec);
     801         return current;
     802     }
     803 
     804     /**
     805      * 布局下面的按钮和下拉选项的监听器
     806      */
     807     @SuppressWarnings("deprecation")
     808     @Override
     809     public void actionPerformed(ActionEvent e) {
     810 
     811         /**
     812          * 获取dorp_down_hours,dorp_down_minute,drop_down_second的值
     813          */
     814         if (e.getSource() == dorp_down_hours) {
     815             valueJudgment();
     816         }
     817         if (e.getSource() == dorp_down_minute) {
     818             valueJudgment();
     819         }
     820         if (e.getSource() == drop_down_second) {
     821             valueJudgment();
     822         }
     823         if (e.getSource() == stop) {
     824             stopActionPerformed();
     825         }
     826         if (e.getSource() == add1) {
     827             add1Action();
     828             myListener();
     829         }
     830         if (e.getSource() == add5) {
     831             add5Action();
     832             myListener();
     833         }
     834         if (e.getSource() == add30) {
     835             add30Action();
     836             myListener();
     837         }
     838         if (e.getSource() == minus1) {
     839             minus1Action();
     840             myListener();
     841         }
     842         if (e.getSource() == minus5) {
     843             minus5Action();
     844             myListener();
     845         }
     846         if (e.getSource() == minus30) {
     847             minus30Action();
     848             myListener();
     849         }
     850         AlarmSound alarmSound = new AlarmSound(ring_setup.getSelectedIndex());
     851         Thread alarmThread = new Thread(alarmSound);
     852         if (e.getSource() == listening_test) {
     853             // 试听
     854             if (!alarmThread.isAlive()) {
     855                 alarmThread.start();
     856             }
     857             if (running) {
     858                 alarmThread.resume();
     859             }
     860             listening_test.setEnabled(false);
     861         }
     862         if (e.getSource() == listening_test_stop) {
     863             // 停止试听
     864             listening_test.setEnabled(true);
     865             if (running) {
     866                 alarmThread.suspend();
     867             }
     868             running = !running;
     869         }
     870         if (e.getSource() == uploadRing) {
     871             // 上传文件
     872         }
     873         if (e.getSource() == exit) {
     874             // 退出程序
     875             AlarmFile.exit();
     876         }
     877         if (e.getSource() == screenshot) {
     878             // 主窗体隐藏
     879             iconed = true;
     880             MyAlarm.this.setVisible(false);
     881             // 开始截图
     882             AlarmTools.screenshot();
     883         }
     884         if (e.getSource() == changeBackground) {
     885             changeBG();
     886         }
     887         if (e.getSource() == about) {
     888             pointX = getMyAlarmX();
     889             pointY = getMyAlarmY();
     890             new AlarmHelp("关于程序");
     891         }
     892     }
     893 
     894     /**
     895      * 更改背景图片</br> 当点击工具-- >更改背景,这里就可以处理更改背景图片
     896      */
     897     private void changeBG() {
     898         setFlagOfBackground(true);
     899         if (background < AlarmBackground.getBackgroundListSize()) {
     900             iconed = true;
     901             setVisible(false);
     902             if (background != AlarmBackground.getBackgroundListSize() - 1) {
     903                 ++background;
     904             } else {
     905                 background = 0;
     906             }
     907             initMainPanel();
     908         }
     909     }
     910 
     911     /**
     912      * 点击-30按钮的时候执行的动作
     913      */
     914     private void minus30Action() {
     915         isHMSZero();
     916         if (dorp_down_minute.getSelectedIndex() - 30 < 0) {
     917             dorp_down_minute.setSelectedIndex(dorp_down_minute
     918                     .getSelectedIndex() + 30);// 60-30
     919             if (dorp_down_hours.getSelectedIndex() == 0) {
     920                 dorp_down_hours.setSelectedIndex(24);// 设置为23
     921             } else {
     922                 // 小时数-1
     923                 dorp_down_hours.setSelectedIndex(dorp_down_hours
     924                         .getSelectedIndex() - 1);
     925             }
     926         } else {
     927             // 分钟数-30
     928             dorp_down_minute.setSelectedIndex(dorp_down_minute
     929                     .getSelectedIndex() - 30);
     930         }
     931         valueJudgment();
     932     }
     933 
     934     /**
     935      * 点击-5按钮的时候执行的动作
     936      */
     937     private void minus5Action() {
     938         isHMSZero();
     939         if (dorp_down_minute.getSelectedIndex() - 5 < 0) {
     940             dorp_down_minute.setSelectedIndex(dorp_down_minute
     941                     .getSelectedIndex() + 55);// 60-5
     942             if (dorp_down_hours.getSelectedIndex() == 0) {
     943                 dorp_down_hours.setSelectedIndex(24);// 设置为23
     944             } else {
     945                 // 小时数-1
     946                 dorp_down_hours.setSelectedIndex(dorp_down_hours
     947                         .getSelectedIndex() - 1);
     948             }
     949         } else {
     950             // 分钟数-5
     951             dorp_down_minute.setSelectedIndex(dorp_down_minute
     952                     .getSelectedIndex() - 5);
     953         }
     954         valueJudgment();
     955     }
     956 
     957     /**
     958      * 点击-1按钮的时候执行的动作
     959      */
     960     private void minus1Action() {
     961         isHMSZero();
     962         if (dorp_down_minute.getSelectedIndex() - 1 == 0) {
     963             dorp_down_minute.setSelectedIndex(60);// 设置为59
     964             if (dorp_down_hours.getSelectedIndex() == 0) {
     965                 dorp_down_hours.setSelectedIndex(24);// 设置为23
     966             } else {
     967                 // 小时数-1
     968                 dorp_down_hours.setSelectedIndex(dorp_down_hours
     969                         .getSelectedIndex() - 1);
     970             }
     971         } else {
     972             // 分钟数-1
     973             dorp_down_minute.setSelectedIndex(dorp_down_minute
     974                     .getSelectedIndex() - 1);
     975         }
     976         valueJudgment();
     977     }
     978 
     979     /**
     980      * 判断dorp_down_hours,dorp_down_minute,drop_down_second当前是否为0,即:"关闭"
     981      */
     982     private void isHMSZero() {
     983         // 如果小时数还没有设置,那么就设置为当前小时数
     984         if (dorp_down_hours.getSelectedIndex() == 0) {
     985             dorp_down_hours.setSelectedIndex(getHour() + 1);
     986         }
     987         // 如果分钟数还没有设置,那么就设置为当前分钟数
     988         if (dorp_down_minute.getSelectedIndex() == 0) {
     989             dorp_down_minute.setSelectedIndex(getMunite() + 1);
     990         }
     991         // 如果秒钟还没有设置,那么就设置为当前秒钟
     992         if (drop_down_second.getSelectedIndex() == 0) {
     993             drop_down_second.setSelectedIndex(getSecond());
     994         }
     995     }
     996 
     997     /**
     998      * 点击+30按钮的时候执行的动作
     999      */
    1000     private void add30Action() {
    1001         isHMSZero();
    1002         if (dorp_down_minute.getSelectedIndex() + 30 > 60) {
    1003             dorp_down_minute.setSelectedIndex(dorp_down_minute
    1004                     .getSelectedIndex() - 30);// +30-60
    1005             if (dorp_down_hours.getSelectedIndex() > 23) {
    1006                 dorp_down_hours.setSelectedIndex(1);// 设置为00
    1007             } else {
    1008                 // 小时数+1
    1009                 dorp_down_hours.setSelectedIndex(dorp_down_hours
    1010                         .getSelectedIndex() + 1);
    1011             }
    1012         } else {
    1013             // 分钟数+30
    1014             dorp_down_minute.setSelectedIndex(dorp_down_minute
    1015                     .getSelectedIndex() + 30);
    1016         }
    1017         valueJudgment();
    1018     }
    1019 
    1020     /**
    1021      * 点击+5按钮的时候执行的动作
    1022      */
    1023     private void add5Action() {
    1024         isHMSZero();
    1025         if (dorp_down_minute.getSelectedIndex() + 5 > 60) {
    1026             dorp_down_minute.setSelectedIndex(dorp_down_minute
    1027                     .getSelectedIndex() - 55);// +5-60
    1028             if (dorp_down_hours.getSelectedIndex() > 23) {
    1029                 dorp_down_hours.setSelectedIndex(1);// 设置为00
    1030             } else {
    1031                 // 小时数+1
    1032                 dorp_down_hours.setSelectedIndex(dorp_down_hours
    1033                         .getSelectedIndex() + 1);
    1034             }
    1035         } else {
    1036             // 分钟数+5
    1037             dorp_down_minute.setSelectedIndex(dorp_down_minute
    1038                     .getSelectedIndex() + 5);
    1039         }
    1040         valueJudgment();
    1041     }
    1042 
    1043     /**
    1044      * 点击+1按钮的时候执行的动作
    1045      */
    1046     private void add1Action() {
    1047         isHMSZero();
    1048         if (dorp_down_minute.getSelectedIndex() + 1 > 60) {
    1049             dorp_down_minute.setSelectedIndex(1);// 设置为00
    1050             if (dorp_down_hours.getSelectedIndex() > 23) {
    1051                 dorp_down_hours.setSelectedIndex(1);// 设置为00
    1052             } else {
    1053                 // 小时数+1
    1054                 dorp_down_hours.setSelectedIndex(dorp_down_hours
    1055                         .getSelectedIndex() + 1);
    1056             }
    1057         } else {
    1058             // 分钟数+1
    1059             dorp_down_minute.setSelectedIndex(dorp_down_minute
    1060                     .getSelectedIndex() + 1);
    1061         }
    1062         valueJudgment();
    1063     }
    1064 
    1065     /**
    1066      * 给h,m,s三个变量赋值,并判断他们的值
    1067      */
    1068     private void valueJudgment() {
    1069         h = dorp_down_hours.getSelectedItem().toString();
    1070         m = dorp_down_minute.getSelectedItem().toString();
    1071         s = drop_down_second.getSelectedItem().toString();
    1072         hsmCheck();
    1073     }
    1074 
    1075     /**
    1076      * 检查时,分,秒的值,如果都不是"关闭",那么</br>
    1077      * 
    1078      * <li>stop按钮要显示出来</li><br/>
    1079      * <li>result要显示出来剩余时间</li><br/>
    1080      * <li>ring_setup要设置为不可用</li> <li>listening_test按钮为不可用</li> <li>
    1081      * listening_test_stop按钮为不可用</li>
    1082      */
    1083     private void hsmCheck() {
    1084         if (h != "关闭" && m != "关闭" && s != "关闭") {
    1085             stop.setVisible(true);
    1086             result.setVisible(true);
    1087             ring_setup.setEnabled(false);
    1088             listening_test.setEnabled(false);
    1089             listening_test_stop.setEnabled(false);
    1090         }
    1091     }
    1092 
    1093     /**
    1094      * stop按钮的动作: <li>
    1095      * 把dorp_down_hours,dorp_down_minute,drop_down_second的值设置为"关闭"</li> <li>
    1096      * 隐藏result</li> <li>ring_setup设置为可用</li> <li>listening_test按钮为可用</li> <li>
    1097      * listening_test_stop按钮为可用</li> <li>stop按钮设置为不可见</li><li>停止声音播放</li>
    1098      */
    1099     private void stopActionPerformed() {
    1100         dorp_down_hours.setSelectedIndex(0);
    1101         dorp_down_minute.setSelectedIndex(0);
    1102         drop_down_second.setSelectedIndex(0);
    1103         result.setVisible(false);
    1104         ring_setup.setEnabled(true);
    1105         listening_test.setEnabled(true);
    1106         listening_test_stop.setEnabled(true);
    1107         // 这里要停止声音
    1108         stop.setVisible(false);
    1109     }
    1110 
    1111     /**
    1112      * 获取当前小时数
    1113      * 
    1114      * @return 返回当前小时数
    1115      */
    1116     private int getHour() {
    1117         return Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
    1118     }
    1119 
    1120     /**
    1121      * 获取当前分钟数
    1122      * 
    1123      * @return 返回当前分钟数
    1124      */
    1125     private int getMunite() {
    1126         return Calendar.getInstance().get(Calendar.MINUTE);
    1127     }
    1128 
    1129     /**
    1130      * 获取当前秒钟数
    1131      * 
    1132      * @return 返回当前秒钟数
    1133      */
    1134     private int getSecond() {
    1135         return Calendar.getInstance().get(Calendar.SECOND);
    1136     }
    1137 
    1138     /**
    1139      * 实现震动功能
    1140      */
    1141     public void shack() {
    1142         Point p = MyAlarm.this.getLocation();
    1143         int x = (int) p.getX();
    1144         int y = (int) p.getY();
    1145         for (int i = 0; i < 5000; i++) {
    1146             MyAlarm.this.setLocation(x - 5, y);
    1147             MyAlarm.this.setLocation(x, y + 5);
    1148             MyAlarm.this.setLocation(x + 5, y);
    1149             MyAlarm.this.setLocation(x, y - 5);
    1150         }
    1151         MyAlarm.this.setLocation(x, y);
    1152     }
    1153 
    1154     /**
    1155      * 获取MyAlarm的X坐标
    1156      * 
    1157      * @return 返回MyAlarm的X坐标
    1158      */
    1159     public int getMyAlarmX() {
    1160         return (int) getLocation().getX();
    1161     }
    1162 
    1163     /**
    1164      * 获取MyAlarm的Y坐标
    1165      * 
    1166      * @return 返回MyAlarm的Y坐标
    1167      */
    1168     public int getMyAlarmY() {
    1169         return (int) MyAlarm.this.getLocation().getY();
    1170     }
    1171 
    1172     /**
    1173      * 闹铃类
    1174      * 
    1175      * @author Hongten
    1176      * 
    1177      * @time 2012-3-2 2012
    1178      */
    1179     class AlarmSound implements Runnable {
    1180         private String temAlarm;
    1181         private String alarm0Path = "src/image/sound/alarm0.wav";//
    1182         private String alarm1Path = "src/image/sound/alarm1.wav";// 
    1183         private String alarm2Path = "src/image/sound/alarm2.wav";// 
    1184         private String alarm3Path = "src/image/sound/alarm3.wav";// 
    1185         private String alarm4Path = "src/image/sound/alarm4.wav";// 
    1186         private String alarm5Path = "src/image/sound/alarm5.wav";// 
    1187         private String alarm6Path = "src/image/sound/alarm6.wav";// 
    1188         private String alarm7Path = "src/image/sound/alarm7.wav";// 
    1189         private String alarm8Path = "src/image/sound/alarm8.wav";// 
    1190 
    1191         public AlarmSound(int a) {
    1192             switch (a) {
    1193             case 0:
    1194                 temAlarm = alarm0Path;
    1195                 break;
    1196             case 1:
    1197                 temAlarm = alarm1Path;
    1198                 break;
    1199             case 2:
    1200                 temAlarm = alarm2Path;
    1201                 break;
    1202             case 3:
    1203                 temAlarm = alarm3Path;
    1204                 break;
    1205             case 4:
    1206                 temAlarm = alarm4Path;
    1207                 break;
    1208             case 5:
    1209                 temAlarm = alarm5Path;
    1210                 break;
    1211             case 6:
    1212                 temAlarm = alarm6Path;
    1213                 break;
    1214             case 7:
    1215                 temAlarm = alarm7Path;
    1216                 break;
    1217             case 8:
    1218                 temAlarm = alarm8Path;
    1219                 break;
    1220             }
    1221         }
    1222 
    1223         // 读取声音文件,并且播放出来
    1224         public void run() {
    1225             File soundFile = new File(temAlarm);
    1226             AudioInputStream audioInputStream = null;
    1227             try {
    1228                 audioInputStream = AudioSystem.getAudioInputStream(soundFile);
    1229             } catch (Exception e1) {
    1230                 e1.printStackTrace();
    1231                 return;
    1232             }
    1233             AudioFormat format = audioInputStream.getFormat();
    1234             SourceDataLine auline = null;
    1235             DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
    1236             try {
    1237                 auline = (SourceDataLine) AudioSystem.getLine(info);
    1238                 auline.open(format);
    1239             } catch (Exception e) {
    1240                 e.printStackTrace();
    1241                 return;
    1242             }
    1243             auline.start();
    1244             int nBytesRead = 0;
    1245             byte[] abData = new byte[512];
    1246             try {
    1247                 while (nBytesRead != -1) {
    1248                     nBytesRead = audioInputStream
    1249                             .read(abData, 0, abData.length);
    1250                     if (nBytesRead >= 0)
    1251                         auline.write(abData, 0, nBytesRead);
    1252                 }
    1253             } catch (IOException e) {
    1254                 e.printStackTrace();
    1255                 return;
    1256             } finally {
    1257                 auline.drain();
    1258                 auline.close();
    1259             }
    1260 
    1261         }
    1262     }
    1263 }

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

      1 package com.b510.ui.main;
      2 
      3 import java.awt.AWTException;
      4 import java.awt.Image;
      5 import java.awt.MenuItem;
      6 import java.awt.PopupMenu;
      7 import java.awt.SystemTray;
      8 import java.awt.TrayIcon;
      9 import java.awt.event.ActionEvent;
     10 import java.awt.event.ActionListener;
     11 import java.awt.event.MouseEvent;
     12 import java.awt.event.MouseListener;
     13 
     14 import javax.swing.ImageIcon;
     15 import javax.swing.JFrame;
     16 
     17 import com.b510.menu.AlarmFile;
     18 import com.b510.menu.AlarmTools;
     19 
     20 public class MyTray implements ActionListener, MouseListener {
     21     private Image icon;// 图标
     22     private TrayIcon trayIcon;
     23     private SystemTray systemTray;// 系统托盘
     24 
     25     private MyAlarm myAlarm; // 托盘所属主窗体
     26     private PopupMenu pop = new PopupMenu(); // 弹出菜单
     27     // 菜单选项
     28     /** 截图 */
     29     private MenuItem screenshot = new MenuItem("ScreenShot");
     30     /** 还原 */
     31     private MenuItem open = new MenuItem("Restore");
     32     /** 退出*/
     33     private MenuItem exit =new MenuItem("Exit");
     34     public MyTray(MyAlarm myAlarm) {
     35         this.myAlarm = myAlarm;
     36         // 得到托盘的图标
     37         icon = new ImageIcon(this.getClass().getClassLoader().getResource(
     38                 "image/mytray.png")).getImage();
     39 
     40         if (SystemTray.isSupported()) {
     41             systemTray = SystemTray.getSystemTray();
     42             // 设置鼠标经过图标时,显示的内容
     43             trayIcon = new TrayIcon(icon, "open Alarm", pop);
     44             pop.add(screenshot);
     45             pop.add(open);
     46             pop.add(exit);
     47             // 添加系统托盘
     48             try {
     49                 systemTray.add(trayIcon);
     50             } catch (AWTException e1) {
     51                 e1.printStackTrace();
     52                 trayIcon.addMouseListener(this);
     53             }
     54         }
     55         displayInfoListener();
     56         trayIcon.addMouseListener(this);
     57         exit.addActionListener(this);
     58         open.addActionListener(this);
     59         screenshot.addActionListener(this);
     60     }
     61 
     62     @Override
     63     public void actionPerformed(ActionEvent e) {
     64         if(e.getSource()==exit){
     65             //退出系统
     66             AlarmFile.exit();
     67         }else if (e.getSource() == open) {
     68             // 单点击菜单中的"还原"选项时,还原窗口
     69             //displayInfo();
     70             //trayIcon.displayMessage("温馨提示", "hello,world", TrayIcon.MessageType.INFO);
     71             myAlarm.iconed = false;
     72             friendListSet(true);
     73             
     74         } else if (e.getSource() == screenshot) {
     75             // 但点击“截图”选项时,进行截图
     76             AlarmTools.screenshot();
     77         } 
     78     }
     79 
     80     @Override
     81     public void mouseClicked(MouseEvent e) {
     82         // 但鼠标点击一次的时候,进行弹出窗口
     83         if (e.getClickCount() == 1 && e.getButton() != MouseEvent.BUTTON3) {
     84             if (!myAlarm.isVisible()) {
     85                 friendListSet(true);
     86             } else {
     87                 friendListSet(false);
     88             }
     89         }
     90         // 但鼠标点击两次的时候,进行弹出窗口
     91         // 如果窗口有显示,则隐藏窗口,否则显示窗口
     92         if (e.getClickCount() == 2 && e.getButton() != MouseEvent.BUTTON3) {
     93             if (!myAlarm.isVisible()) {
     94                 friendListSet(true);
     95             } else {
     96                 friendListSet(false);
     97             }
     98         }
     99     }
    100 
    101     /**
    102      * 设置friendList的可见性
    103      */
    104     private void friendListSet(boolean flag) {
    105         myAlarm.setVisible(true);
    106         myAlarm.setExtendedState(JFrame.NORMAL);
    107     }
    108     
    109     
    110     public void displayInfoListener() {
    111         new Thread(new Runnable() {// 设置一个线程
    112                     public void run() {
    113                         while (true) {
    114                             try {
    115                                 Thread.sleep(1000);
    116                             } catch (Exception e) {
    117                                 e.printStackTrace();
    118                             }
    119                             if(myAlarm.getSecondOfResult()==30){
    120                                  trayIcon.displayMessage("温馨提示","距闹钟设置时间还剩:\n00 时 00 分 " +myAlarm.getSecondOfResult() + " 秒",TrayIcon.MessageType.INFO);
    121                                  myAlarm.setSecondOfResult(29);
    122                             }
    123                             if(myAlarm.getFlagOfBackground()){
    124                                 trayIcon.displayMessage("温馨提示","您已经更改了背景,点击托盘图标\n可以看到效果,右键托盘图标\n可以进行功能选择。",TrayIcon.MessageType.INFO);
    125                                 myAlarm.setFlagOfBackground(false);
    126                             }
    127                         }
    128                     }
    129                 }).start();
    130     }
    131 
    132     @Override
    133     public void mouseEntered(MouseEvent arg0) {
    134         // TODO Auto-generated method stub
    135 
    136     }
    137 
    138     @Override
    139     public void mouseExited(MouseEvent arg0) {
    140         // TODO Auto-generated method stub
    141 
    142     }
    143 
    144     @Override
    145     public void mousePressed(MouseEvent arg0) {
    146         // TODO Auto-generated method stub
    147 
    148     }
    149 
    150     @Override
    151     public void mouseReleased(MouseEvent arg0) {
    152         // TODO Auto-generated method stub
    153 
    154     }
    155 }

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

     1 package com.b510.ui.up;
     2 
     3 import java.util.Calendar;
     4 
     5 /**
     6  *
     7  * @author Hongten
     8  * 主界面区-显示现在的时间
     9  */
    10 public class AlarmShowNow {
    11 
    12     /**
    13      * 获得系统的当前时间,并返回
    14      * @return 返回系统当前时间
    15      */
    16     public static String now() {
    17         Calendar cal = Calendar.getInstance();
    18         int hour = cal.get(Calendar.HOUR_OF_DAY);
    19         int min = cal.get(Calendar.MINUTE);
    20         int sec = cal.get(Calendar.SECOND);
    21         String current = new String(hour+ ":" + min + ":" + sec);
    22         return current;
    23     }
    24    public static void main(String args[]){
    25        System.out.println(now());
    26    }
    27 }

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

    附件(源码):https://files.cnblogs.com/hongten/alarm.zip

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

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

    More reading,and english is important.

    I'm Hongten

     

    大哥哥大姐姐,觉得有用打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。谢谢。
    Hongten博客排名在100名以内。粉丝过千。
    Hongten出品,必是精品。

    E | hongtenzone@foxmail.com  B | http://www.cnblogs.com/hongten

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

  • 相关阅读:
    idea + springboot 的java后台服务器通过小米推送
    python编程之禅
    温故而知新-MySQL高级编程
    温故而知新-mysql的一些语法show,describe,explain,fulltext
    温故而知新-PHP文件操作函数
    温故而知新-正则单词和strlen
    php使用tcpdf实现在线PDF功能
    温故而知新-array_walk和sizeof和array_count_values()和extract()
    温故而知新-strtok函数
    mysql中的blob和text区别
  • 原文地址:https://www.cnblogs.com/hongten/p/java_alarm.html
Copyright © 2020-2023  润新知