java开发_闹钟

项目结构:

java开发_闹钟_第1张图片

效果图一:

java开发_闹钟_第2张图片

效果图二:

java开发_闹钟_第3张图片

效果图三:

java开发_闹钟_第4张图片

关于闹钟:

java开发_闹钟_第5张图片

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

 

 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      * 更改背景图片
当点击工具-- >更改背景,这里就可以处理更改背景图片
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 * 检查时,分,秒的值,如果都不是"关闭",那么
1077 * 1078 *
  • stop按钮要显示出来

  • 1079 *
  • result要显示出来剩余时间

  • 1080 *
  • ring_setup要设置为不可用
  • listening_test按钮为不可用
  • 1081 * listening_test_stop按钮为不可用
  • 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按钮的动作:
  • 1095 * 把dorp_down_hours,dorp_down_minute,drop_down_second的值设置为"关闭"
  • 1096 * 隐藏result
  • ring_setup设置为可用
  • listening_test按钮为可用
  • 1097 * listening_test_stop按钮为可用
  • stop按钮设置为不可见
  • 停止声音播放
  • 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 }

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

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

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

     

     

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

     

    More reading,and english is important.

     

    I'm Hongten

     

     

     

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

     

    E | [email protected]  B | http://www.cnblogs.com/hongten

     

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

     

    转载于:https://www.cnblogs.com/hongten/archive/2012/06/02/java_alarm.html

    你可能感兴趣的:(java开发_闹钟)