在RCP中实现系统托盘功能
在RCP中加入系统托盘功能,类似msn和QQ。功能就不说了。
在RCP的WorkbenchWindowAdvisor的postWindowOpen()中创建系统托盘,另外要override preWindowShellClose()方法,否则按程序右上角的X,整个程序就会被关闭,重写后实现程序最小化的功能。
ApplicationWorkbenchWindowAdvisor.java
<!--CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt--><style type="text/css"> <!--code { font-family: Courier New, Courier; font-size: 10pt; margin: 0px; }--> </style> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <!-- ======================================================== --><!-- = Java Sourcecode to HTML automatically converted code = --><!-- = Java2Html Converter 5.0 [2006-02-26] by Markus Gebhard markus@jave.de = --><!-- = Further information: http://www.java2html.de = -->
/** *ApplicationWorkbenchWindowAdvisor.java */ packagecom.mi.pwdgate;
importorg.eclipse.swt.graphics.Point; importorg.eclipse.ui.IWorkbenchPreferenceConstants; importorg.eclipse.ui.PlatformUI; importorg.eclipse.ui.application.ActionBarAdvisor; importorg.eclipse.ui.application.IActionBarConfigurer; importorg.eclipse.ui.application.IWorkbenchWindowConfigurer; importorg.eclipse.ui.application.WorkbenchWindowAdvisor;
importcom.mi.pwdgate.util.SystemTrayMaster;
publicclassApplicationWorkbenchWindowAdvisorextendsWorkbenchWindowAdvisor{
privateSystemTrayMastertrayMaster; /* *(non-Javadoc) * *@seeorg.eclipse.ui.application.WorkbenchWindowAdvisor#postWindowOpen() */ publicvoidpostWindowOpen(){ createSystemTray(); }
privatevoidcreateSystemTray(){ trayMaster=newSystemTrayMaster(); trayMaster.createSystemTray(); }
/* *(non-Javadoc) * *@seeorg.eclipse.ui.application.WorkbenchWindowAdvisor#preWindowShellClose() */ publicbooleanpreWindowShellClose(){ trayMaster.minimizeWindow(); returnfalse; } } |
<!--CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt--><style type="text/css"> <!--code { font-family: Courier New, Courier; font-size: 10pt; margin: 0px; }--> </style> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <!-- ======================================================== --><!-- = Java Sourcecode to HTML automatically converted code = --><!-- = Java2Html Converter 5.0 [2006-02-26] by Markus Gebhard markus@jave.de = --><!-- = Further information: http://www.java2html.de = -->
/** *SystemTrayMaster.java */ packagecom.mi.pwdgate.util;
importorg.eclipse.swt.SWT; importorg.eclipse.swt.events.SelectionAdapter; importorg.eclipse.swt.events.SelectionEvent; importorg.eclipse.swt.events.SelectionListener; importorg.eclipse.swt.graphics.Image; importorg.eclipse.swt.widgets.Display; importorg.eclipse.swt.widgets.Event; importorg.eclipse.swt.widgets.Listener; importorg.eclipse.swt.widgets.Menu; importorg.eclipse.swt.widgets.MenuItem; importorg.eclipse.swt.widgets.Shell; importorg.eclipse.swt.widgets.Tray; importorg.eclipse.swt.widgets.TrayItem; importorg.eclipse.ui.PlatformUI;
/** *@authormoneyice2006-5-9 */ publicclassSystemTrayMasterimplementsSelectionListener,Listener{ privatefinalclassRestoreWindowListenerextendsSelectionAdapter{ publicvoidwidgetSelected(SelectionEvente){ restoreWindow(); } }
privateMenumenu;
privateMenuItem[]menuItems=new MenuItem[0];
privateRestoreWindowListenerrestoreWindowListener;
publicSystemTrayMaster(){ this.restoreWindowListener=newRestoreWindowListener(); }
//ClosestheApplication protectedvoidcloseApplication(){ PlatformUI.getWorkbench().close(); }
//clickthetray publicvoidwidgetSelected(SelectionEvente){ }
//doubleclickthetray publicvoidwidgetDefaultSelected(SelectionEvente){ restoreWindow(); }
//Getssystemshell privateShellgetShell(){ returnPlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); }
//MinimizestheWindow publicvoidminimizeWindow(){ getShell().setMinimized(true); getShell().setVisible(false); }
//Restoresthewindow protectedvoidrestoreWindow(){ Shellshell=PlatformUI.getWorkbench().getActiveWorkbenchWindow() .getShell(); shell.open(); shell.setMinimized(false); shell.forceActive(); shell.forceFocus(); }
publicvoidshowMenu(){ clearItems(); MenuItemopenItem; MenuItemcloseItem; openItem=newMenuItem(this.menu,SWT.PUSH); closeItem=newMenuItem(this.menu,SWT.NONE); closeItem.setText("Close"); closeItem.addSelectionListener(newSelectionAdapter(){ publicvoidwidgetSelected(SelectionEvente){ closeApplication(); } }); this.menuItems=newMenuItem[]{openItem,closeItem};
openItem.setText("OpenPasswordGate"); openItem.addSelectionListener(this.restoreWindowListener); this.menu.setVisible(true); }
privatevoidclearItems(){ for(inti=0;i<this.menuItems.length;i++){ MenuItemitem=this.menuItems[i]; item.removeSelectionListener(this.restoreWindowListener); this.menuItems[i].dispose(); } }
publicvoidhandleEvent(Eventevent){ showMenu(); }
publicvoidcreateSystemTray(){ //Getssystemtray Traytray=Display.getDefault().getSystemTray(); //Createstrayitem TrayItemitem=newTrayItem(tray,SWT.NONE); item.setText("PasswordGate"); item.setToolTipText("PasswordGate"); //Setsimagefortray Imageimage=ImageShop.get("default"); item.setImage(image);
item.addSelectionListener(this); item.addListener(SWT.MenuDetect,this);
menu=newMenu(getShell(),SWT.POP_UP); } } |
ç¨åºæ§è¡åææ