`

实现漂亮的系统托盘

阅读更多
由于工作忙,对于代码不多做解释,直接贴上来,请大家见谅
package com.netunit.workbench.sys;

import java.util.Timer;
import java.util.TimerTask;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolTip;
import org.eclipse.swt.widgets.Tray;
import org.eclipse.swt.widgets.TrayItem;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.plugin.AbstractUIPlugin;

import com.netunit.workbench.actions.LogoffAction;
import com.netunit.workbench.intro.Application;

/**
 * 托盘实现类
 * @author 何明
 *
 */
public class HookSysTray {

	private TrayItem trayItem;

	public HookSysTray() {

	}

	public void createSysTray(final IWorkbenchWindow window) {
		trayItem = initTrayItem(window);
		if (trayItem != null) {
			trayPopupMenu(window);
			trayMinimize(window);
		}
	}

	// 最小化程序窗口
	public void windowMinimized(final Shell shell) {
		shell.setMinimized(true);
		shell.setVisible(false);
	}

	// 最小化程序到托盘
	private void trayMinimize(final IWorkbenchWindow window) {
		window.getShell().addShellListener(new ShellAdapter() {
			public void shellIconified(ShellEvent e) {
				window.getShell().setVisible(false);
			}
		});
		trayItem.addListener(SWT.Selection, new Listener() {
			public void handleEvent(Event event) {
				Shell shell = window.getShell();
				if (!shell.isVisible()) {
					shell.setVisible(true);
					window.getShell().setMinimized(false);
				}
			}
		});
	}

	// 托盘弹出菜单
	private void trayPopupMenu(final IWorkbenchWindow window) {
		trayItem.addListener(SWT.MenuDetect, new Listener() {
			public void handleEvent(Event event) {
				MenuManager trayMenu = new MenuManager();
				Menu menu = trayMenu.createContextMenu(window.getShell());
				fillTrayItem(trayMenu, window);
				menu.setVisible(true);
			}
		});
	}

	// 构造托盘菜单项
	private void fillTrayItem(IMenuManager trayItem,
			final IWorkbenchWindow window) {
		Action exitSystem = new Action("退出系统[&E]", AbstractUIPlugin
				.imageDescriptorFromPlugin(Application.ID,
						"icons/exit.gif")) {
			public void run() {
				PlatformUI.getWorkbench().close();
			}
		};
		trayItem.add(new LogoffAction());
		trayItem.add(exitSystem);
	}

	// 初始化托盘项目的文字和图标
	private TrayItem initTrayItem(final IWorkbenchWindow window) {
		final Tray tray = window.getShell().getDisplay().getSystemTray();
		if (tray == null)
			return null;
		trayItem = new TrayItem(tray, SWT.NONE);
		trayItem.setImage(CacheImage.getINSTANCE().getImage(
				Application.ID, "icons/logo.gif"));
		// 定时显示气泡提示文本
		Timer timer = new Timer();
		timer.schedule(new TimerTask() {
			public void run() {
				window.getShell().getDisplay().syncExec(new Runnable() {
					public void run() {
						ToolTip tip = new ToolTip(window.getShell(),
								SWT.BALLOON | SWT.ICON_INFORMATION);
						tip.setAutoHide(true);
						tip.setMessage("银驼铃MSAP2000网元管理系统");
						tip.setText("欢迎使用");
						trayItem.setToolTip(tip);
						tip.setVisible(true);
					}
				});
			}
		}, 0, 30 * 60 * 1000);
		return trayItem;
	}

	public void Dispose() {
		if (trayItem != null)
			trayItem.dispose();
	}
}


再在ApplicationWorkbenchWindowAdvisor类中添加两个方法
/**
	 * 创建系统托盘
	 */
	public void createSystemTray() {

		hookSysTray = new HookSysTray();

		hookSysTray.createSysTray(getWindowConfigurer().getWindow());

	}

	/**
	 * 判断窗口是否被关闭
	 */
	public boolean preWindowShellClose() {
		hookSysTray.windowMinimized(getWindowConfigurer().getWindow()
				.getShell());
		return false;
	}


再在重写dispose()方法
public void dispose() {
		hookSysTray.Dispose();
		CacheImage.getINSTANCE().dispose();
	}



再在postWindowCreate()方法中添加如下代码即可
createSystemTray();
		String[] args=Platform.getApplicationArgs();
		if(args.length==1&&args[0].equals("system")) 
			getWindowConfigurer().getWindow().getShell().setMinimized(true);

分享到:
评论

相关推荐

    Javafx2 系统托盘实现

    Javafx2 系统托盘实现

    vb 漂亮的气泡托盘

    实现漂亮的气泡托盘提示,我们主要涉及以下几个步骤: 1. **创建托盘图标**:首先,我们需要在VB项目中添加一个 TrayIcon 控件,这将允许我们的程序在系统托盘中显示图标。在设计阶段,设置该控件的 Icon 属性为...

    漂亮的气泡系统托盘

    【标题解析】:“漂亮的气泡系统托盘”指的是在计算机应用程序中,一种设计美观的系统托盘区域(也称为通知区域或系统 tray)的实现。系统托盘是Windows操作系统桌面底部任务栏右下角的一个区域,常用于放置各种程序...

    VB气泡托盘很漂亮.

    综上所述,VB气泡托盘是一个用VB编程语言实现的,用于在系统托盘区显示通知的组件。通过DLL源码,开发者可以方便地在自己的应用程序中集成这个功能,并且可以根据需要进行个性化调整。如果你正在使用VB开发Windows...

    C#实现和开始菜单一样漂亮的菜单

    - 创建任务栏通知区域(系统托盘)图标,需要使用`NotifyIcon`控件。将其添加到窗体,并设置`Icon`属性为所需的图标。 - 添加`ContextMenuStrip`控件,用于显示右键单击托盘图标时的上下文菜单。将`...

    漂亮的VB托盘泡泡提示类源码

    本资源提供了一个漂亮的VB托盘泡泡提示类源码,允许开发者轻松地在自己的应用程序中实现这种功能。 源码中的“TipCls.cls”是一个类模块,它封装了泡泡提示的实现细节,使得开发者无需深入了解其内部工作原理,只需...

    XP系统下漂亮的任务栏时钟

    2. **任务栏**:是Windows桌面的底部或顶部的横条,显示运行的应用程序、系统托盘以及“开始”按钮等元素。 3. **时钟**:这是任务栏上的一个重要组件,显示当前日期和时间,也是用户经常参考的信息源。 4. **表**...

    仿QQ即时通讯软件2023最新版+MySQL+JAVA

    7.实现系统托盘,托盘菜单,弹出菜单,修改用户密码等功能; 8.使用MySQL数据库,实现对数据库的增删改查等相关技术。 9.实现即时聊天功能,使用IO流输入输出技术,Socket网络通讯技术,序列化技术 10.使用Swing组件...

    xtreme 界面库 非常漂亮的trayicon

    【标题】:“xtreme 界面库 非常漂亮的trayicon”指的是XTreme ToolkitPro中的TrayIcon组件,这是一个用于创建具有吸引力且功能强大的系统托盘图标(TrayIcon)的工具。 【描述】:“xtreme 界面库 非常漂亮的...

    golang GUI图形界面框架fyne演示例子

    `fyne`还支持多窗口应用,以及与系统托盘的交互。开发者可以利用`fyne.OpenURL()`打开外部链接,`widget.Notification`显示通知,`app.Settings().OnChanged()`监听系统设置变化等。 通过这个演示例子,你可以深入...

    VB源码右下角显示托盘程序.rar

    用VB实现屏幕右下角的托盘图标,一个显示托盘的气泡提示程序源码,鼠标放在托盘的图标上,会弹出像Windows XP系统中的托盘提示,一个很漂亮的气泡文字,鼠标移走后会自动消失,在各大VB开发的应用程序中,似乎你都...

    漂亮的定时闹钟[Reminder.rar]-精品源代码

    该压缩包文件“漂亮的定时闹钟[Reminder.rar]”包含一系列与编程相关的源代码文件,主要是用以构建一...对于有经验的开发者来说,这则是一个很好的示例,展示了如何实现特定功能,如系统托盘图标和窗口始终保持在顶部。

    WinForm华丽界面特效300例

    - 实例004:任务栏托盘菜单,即在系统托盘区域设计的菜单,这对于隐藏主窗口进行后台运行的应用程序很有用。 2. 工具栏设计: - 实例007:带背景的工具栏,使得工具栏界面不那么单调,增加了视觉层次感。 - 实例...

    可拖动的悬浮窗+对话框悬浮窗

    在IT行业中,创建可拖动的悬浮窗和对话框悬浮...在实际应用中,这类功能常被用于桌面工具、系统托盘应用、辅助软件等,为用户提供方便的交互体验。通过不断实践和优化,我们可以创造出更加人性化、易用的悬浮窗口应用。

    IconLib漂亮经典的图标库(1653个图标)

    此外,这些图标也可以用在桌面快捷方式、系统托盘或状态区域,为用户提供清晰的操作指示。 对于软件开发者而言,IconLib提供的图标资源可以极大地节省他们在图形设计上的时间和精力,让他们能够专注于代码编写和...

    vc++ 开发实例源码包

    老版qq系统的实现。 MyIE3.0浏览器源代码 如题。完整的代码,重载控件实现,非常适合初学者。 MyPhpServer(原创,有实现的主要代码) 如题。 microcai-ibus-t9-输入法源码 如题,主要源码就几个,详细见代码。 ...

    C#400例子.pdf

    - **实例说明**:许多应用程序会在任务栏的系统托盘区域放置一个小图标,点击该图标会弹出一个菜单,提供应用程序的主要功能选项。 - **技术要点**: - 注册系统托盘图标。 - 设计简洁易用的菜单布局。 **实例005...

    C#.net_经典编程例子

    - **描述**:此实例展示了一个美观的菜单设计,类似于Windows操作系统中的开始菜单,提供了丰富的选项和直观的操作方式。 - **实现方法**:可以使用自定义样式和布局来实现这样的效果,可能涉及图像处理和动态布局...

    LanMiaoDesktop一个完整electron桌面记账程序技术栈主要使用electronvuevuetify

    3. **托盘最小化**:通过 Electron 的 Tray API,可以实现将应用最小化到系统托盘,提升用户体验。 4. **闪烁提醒**:当有新消息或事件时,应用窗口可以闪烁提醒用户,这通常通过修改窗口的样式实现。 5. **NSIS ...

    iDesktopCalendar 1.0.3 特别版

    语音报时或者音乐提示时,可以通过双击系统托盘图标或者窗口来停止声音播放。 在窗口自动隐藏时,可以有系统任务栏的气泡提示。 --自带简单的实时皮肤编辑器,轻松实现皮肤定制。 --完全免费,不含...

Global site tag (gtag.js) - Google Analytics