java 点击按钮最小化_java swing 点击关闭按钮最小化到系统托盘的实现

这篇博客介绍了如何在Java Swing应用中,当用户点击关闭按钮时,程序最小化到系统托盘而不是退出。主要涉及TrayIcon和SystemTray类的使用,以及添加鼠标监听器来实现在托盘区域双击恢复窗口的功能。博主强调了正确测试代码的重要性,避免误导他人。
摘要由CSDN通过智能技术生成

开始一点一点地加自己以前没试过的程序功能,这一次是实现了当点击关闭按钮的时候,程序自己最小化到系统托盘而不是退出。我也是从网上找了些程序来做参考,不过对有一些博文真的是无语了,连个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);

只需要在你需要显示气泡通知的时候调用,就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值