java swing qq托盘图标气泡消息_托盘程序及消息提示、闪动

这是一个使用Java Swing实现的QQ风格托盘图标和气泡消息提示程序。程序包含了托盘图标、弹出菜单、双击打开窗口、消息提示音效以及消息闪动等功能。用户可以通过托盘图标进行打开窗口和退出操作,并在接收到新消息时,托盘图标会进行闪动提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

已结贴√

问题点数:36 回复次数:4

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

托盘程序及消息提示、闪动

麻烦大神帮我看下程序那里有问题,为什么打不开窗口和托盘的菜单面盘,已经看了很久了,程序运行需要Substance.jar

import java.applet.Applet;

import java.applet.AudioClip;

import java.awt.AWTException;

import java.awt.Image;

import java.awt.MenuItem;

import java.awt.PopupMenu;

import java.awt.SystemTray;

import java.awt.TextArea;

import java.awt.Toolkit;

import java.awt.TrayIcon;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import

import

import java.util.Date;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.SwingUtilities;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;

import org.jvnet.substance.skin.SubstanceBusinessBlueSteelLookAndFeel;

/**

*

* 创建闪动的托盘图像

* @author Everest

*

*/

public class BickerTray extends JFrame implements Runnable {

private static final long serialVersionUID = -3115128552716619277L;

private SystemTray sysTray;// 当前操作系统的托盘对象

private TrayIcon trayIcon;// 当前对象的托盘

private ImageIcon icon = null;

private TextArea ta = null;

private static int count = 1; //记录消息闪动的次数

private boolean flag = false; //是否有新消息

private static int times = 1; //接收消息次数

public BickerTray() {

this.createTrayIcon();// 创建托盘对象

Image image = this.getToolkit().getImage(getRes("G:\\美化\\Leopard_Graphite_Icon_Pack_by_caeszer\\Icons\\Windows\\Signal.ico"));

this.setIconImage(image);

init();

}

public URL getRes(String str){

return this.getClass().getClassLoader().getResource(str);

}

/**

* 初始化窗体的方法

*/

public void init() {

this.setTitle("消息盒子");

ta = new TextArea("");

ta.setEditable(false);

this.add(ta);

this.setVisible(true);

this.setSize(400, 400);

//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLocationRelativeTo(null);

// 添加窗口最小化事件,将托盘添加到操作系统的托盘

/*this.addWindowListener(new WindowAdapter(){

public void windowIconified(WindowEvent e) {

addTrayIcon();

}

});*/System.out.println("ok");

addTrayIcon();

}

/**

* 添加托盘的方法

*/

public void addTrayIcon() {

try {

sysTray.add(trayIcon);// 将托盘添加到操作系统的托盘

setVisible(false);    // 使得当前的窗口隐藏

new Thread(this).start();

} catch (AWTException e1){

e1.printStackTrace();

}

}

/**

* 创建系统托盘的对象 步骤:

* 1,获得当前操作系统的托盘对象

* 2,创建弹出菜单popupMenu

* 3,创建托盘图标icon

* 4,创建系统的托盘对象trayIcon

*/

public void createTrayIcon() {

sysTray = SystemTray.getSystemTray();// 获得当前操作系统的托盘对象

//icon = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Mr Lin\\Desktop\\QQ截图20140311131941.png");

icon = new ImageIcon(Toolkit.getDefaultToolkit().getImage("G:\\美化\\Leopard_Graphite_Icon_Pack_by_caeszer\\Icon\\Windows\\iTunes.ico"));

//icon = new ImageIcon(getRes("G:\\美化\\Leopard_Graphite_Icon_Pack_by_caeszer\\Icons\\Windows\\Finder.ico"));// 托盘图标

PopupMenu popupMenu = new PopupMenu();// 弹出菜单

MenuItem mi = new MenuItem("打开");

MenuItem exit = new MenuItem("退出");

popupMenu.add(mi);

popupMenu.add(exit);

// 为弹出菜单项添加事件

mi.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

ta.setText(ta.getText()+"\n==============================================\n 《通知》 今天下午4:00到大礼堂开会。 \n 第"+times+"次接收时间:"+ new Date().toLocaleString()); // 设置通知消息内容

BickerTray.this.setExtendedState(JFrame.NORMAL);

BickerTray.this.setVisible(true); // 显示窗口

BickerTray.this.toFront(); //显示窗口到最前端

flag = false;  //消息打开了

count = 0;

times++;

}

});

exit.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

});

trayIcon = new TrayIcon(icon.getImage(), "消息盒子", popupMenu);

/** 添加鼠标监听器,当鼠标在托盘图标上双击时,默认显示窗口 */

trayIcon.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent e) {

if (e.getClickCount() == 2) { // 鼠标双击

ta.setText(ta.getText()+"\n==============================================\n 《通知》 今天下午4:00到大礼堂开会。 \n 第"+times+"次接收时间:"+ new Date().toLocaleString()); // 设置通知消息内容

BickerTray.this.setExtendedState(JFrame.NORMAL);

BickerTray.this.setVisible(true); // 显示窗口

BickerTray.this.toFront();

flag = false;  //消息打开了

count = 0; times++;

}

}

});

}

/**

* 线程控制闪动

*/

public void run() {

while (true) {

if(flag){ // 有新消息

try {

if(count == 1){

// 播放消息提示音

//AudioPlayer p = new AudioPlayer(getRes("file:com/sound/Msg.wav"));

//p.play(); p.stop();

try {

AudioClip p = Applet.newAudioClip(new URL("file:sound/msg.wav"));

p.play();

} catch (MalformedURLException e) {

e.printStackTrace();

}

}

// 闪动消息的空白时间

this.trayIcon.setImage(new ImageIcon("").getImage());

Thread.sleep(500);

// 闪动消息的提示图片

this.trayIcon.setImage(icon.getImage());

Thread.sleep(500);

} catch (Exception e) {

e.printStackTrace();

}

count++;

}else{ // 无消息或是消息已经打开过

this.trayIcon.setImage(icon.getImage());

try {

Thread.sleep(20000);

flag = true;

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

/**

* @param args

*/

public static void main(String[] args) {

JFrame.setDefaultLookAndFeelDecorated(true);

try {

UIManager.setLookAndFeel(new SubstanceBusinessBlueSteelLookAndFeel());

} catch (UnsupportedLookAndFeelException e) {

e.printStackTrace();

}

SwingUtilities.invokeLater(new Runnable() {

public void run() {

new BickerTray();

}

});

}

}

搜索更多相关主题的帖子:

import 托盘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值