java swing 点击关闭按钮最小化到系统托盘的实现
2016-12-30 13:42
761 查看
开始一点一点地加自己以前没试过的程序功能,这一次是实现了当点击关闭按钮的时候,程序自己最小化到系统托盘而不是退出。我也是从网上找了些程序来做参考,不过对有一些博文真的是无语了,连个main函数都没有还敢说是自己亲自测试可行。唉,我应该说什么好呢?不想修改至少也得自己运行一下吧,省得误人子弟。 好了,实现这个功能主要有几个地方: 需要实现这个功能,需要两个类,一个是TrayIcon,一个是SystemTray类: private TrayIcon trayIcon;// 托盘图标 private SystemTray systemTray;// 系统托盘 然后通过这两个类,我自己封装了一个函数minimizeToTray,实现如下: public void minimizeToTray() { try { if (SystemTray.isSupported()) // 判断当前平台是否支持系统托盘 { systemTray = SystemTray.getSystemTray();// 获得系统托盘的实例 URL path = BeiKeLogin.class.getResource("myicon.png"); System.out.println(path); Image imgae = ImageIO.read(path); trayIcon = new TrayIcon(imgae); systemTray.add(trayIcon);// 设置托盘的图标 trayIcon.addMouseListener(iconAdap);//为图标设置鼠标监听器 } } catch (Exception ex) { ex.printStackTrace(); } 图标的监听器如下: MouseAdapter iconAdap = new MouseAdapter() { public void mouseClicked(MouseEvent e){ if(e.getClickCount() == 2 )//双击托盘窗口再现 setExtendedState(Frame.NORMAL); setVisible(true); }}; 再接下来,就是给窗体设置点击关闭按钮的时候,隐藏窗体。 setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 并且添加“最小化到系统托盘”(实际上是释放掉窗体)的监听器: addWindowListener(winAdap); 监听器winAdap的实现如下: WindowAdapter winAdap = new WindowAdapter() { public void windowIconified(WindowEvent e){ dispose();//窗口最小化时dispose该窗口 } }; 大概就是这样,就可以实现了。下面再给个我参考的那个网上的程序吧: import java.awt.AWTException; import java.awt.Frame; import java.awt.SystemTray; import java.awt.TrayIcon; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JFrame; public class Bounce extends JFrame{ private TrayIcon trayIcon;//托盘图标 new private SystemTray systemTray;//系统托盘 // public Bounce() { super("系统托盘图标"); SystemTray.isSupported(); //判断当前平台是否支持系统托盘 systemTray = SystemTray.getSystemTray();//获得系统托盘的实例 setSize(150,150); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); try { trayIcon = new TrayIcon(ImageIO.read(new File("main.png"))); systemTray.add(trayIcon);//设置托盘的图标,0.gif与该类文件同一目录 } catch (IOException e1) {e1.printStackTrace();} catch (AWTException e2) {e2.printStackTrace();} this.addWindowListener( new WindowAdapter(){ public void windowIconified(WindowEvent e){ dispose();//窗口最小化时dispose该窗口 } }); trayIcon.addMouseListener( new MouseAdapter(){ public void mouseClicked(MouseEvent e){ if(e.getClickCount() == 2)//双击托盘窗口再现 setExtendedState(Frame.NORMAL); setVisible(true); } }); } public static void main(String args[]) { new Bounce(); } } 注: 对于这个程序来说,我自己在调试的时候,下面这一句总是报出can't read input file的错。 trayIcon = new TrayIcon(ImageIO.read(new File("main.png"))); 由于我用的是eclipse,在路径总是上与单独用命令行有点区别。可能在eclipse上通过了,导出成jar包又不行了。参考程序调用的是ImageIO.read(File)方法,这样在路径问题上很容易出毛病,所以我将这句话改了一下,就可以完美解决这个问题了(我采用的是ImageIO.read(URL)方法,如最上面我的程序实现方法): URL path = BeiKeLogin.class.getResource("myicon.png"); //定义一个URL,并指向图片资源(BeiKeLogin为 //我的程序的类名) Image imgae = ImageIO.read(path); trayIcon = new TrayIcon(imgae); 这样一来,就可以完美得到解决了。 另外,最小化到系统托盘,可能我们还想做一个气泡的通知,我们只需要再加上这样一句话: trayIcon.displayMessage("通知:", "程序最小化到系统托盘", TrayIcon.MessageType.INFO); 只需要在你需要显示气泡通知的时候调用,就可以了。
相关文章推荐
- C# 点击关闭按钮后最小化到系统托盘
- VB6.0实现点击窗体的系统最小化或关闭按钮将窗体最小化到系统托盘区
- java Swing 实现将系统最小化到系统托盘
- 如何重用这个代码(点击关闭按钮最小化到系统托盘)?
- C#按关闭按钮实现最小化,按ESC才关闭的实现【含系统消息大全】
- Java JFrame设计及最小化到系统托盘的实现
- swing 自定义最小化按钮后,实现点击任务栏图标,使窗体重新显示
- Java中实现用户点击关闭窗口按钮后提示用户,选择“是”后退到父窗口,选择“否”留在原窗口
- c# winform 让Form窗体上系统自带的红色关闭按钮失效,点击关闭变为最小化
- Java swing 仿QQ实现系统托盘图标(下)
- java swing中点击按钮后弹出JFrame窗口,关闭弹出的窗口,程序都关了的解决方案
- C# 窗体点击关闭按钮时最小化到托盘
- WinFrom点击关闭按钮时提示关闭或最小化的实现
- C#按关闭按钮实现最小化,按ESC才关闭的实现【含系统消息大全】
- java实现最小化到系统托盘图标的代码
- foobar2000设置关闭按钮最小化到系统托盘
- 【转载】WinFrom点击关闭按钮时提示关闭或最小化的实现【2】
- C# 点击关闭按钮最小化到托盘
- C# 窗体点击关闭按钮时最小化到托盘
- c# winform 让Form窗体上系统自带的红色关闭按钮失效,点击关闭变为最小化