hkbmwcn

          rcp 程序最小化窗口到系統托盤

          在RCP程序中最小化窗口到系統托盤并不像SWT程序那樣直接。在網上找了一段代碼,自己試驗通過了,現在貼出來大家分享。
          在RCP中繼承WorkbenchAdvisor的子類中添加下面代碼就可以了。

           public void postStartup() {
            super.postStartup();
            final Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
            shell.addShellListener(new ShellAdapter() {
             public void shellIconified(ShellEvent e) {
              shell.setVisible(false);
             }
            });
            createSystemTray();

           }

           private void createSystemTray() {
            Tray tray = Display.getDefault().getSystemTray();
            TrayItem item = new TrayItem(tray, SWT.NONE);
            item.setText("JDishNetwork");
            item.setToolTipText("JDishNetwork");
            Image image = new Image(Display.getDefault(), 16, 16);
            item.setImage(image);
            this.trayManager = new TrayItemManager();
            item.addSelectionListener(this.trayManager);
            item.addListener(SWT.MenuDetect, this.trayManager);
           }

           private class TrayItemManager implements SelectionListener, Listener {
            // TODO: Convert to one class
            private final class WindowStateListener extends SelectionAdapter {
             public void widgetSelected(SelectionEvent e) {
              minimizeWindow();
             }
            }
            private final class RestoreWindowListener extends SelectionAdapter {
             public void widgetSelected(SelectionEvent e) {
              restoreWindow();
             }
            }
            private boolean minimized = false;
            private Menu menu;
            private MenuItem[] menuItems = new MenuItem[0];
            private RestoreWindowListener restoreWindowListener;
            private WindowStateListener minimizeWindowListener;

            public TrayItemManager() {
             this.menu = new Menu(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.POP_UP);
             this.restoreWindowListener = new RestoreWindowListener();
             this.minimizeWindowListener = new WindowStateListener();

            }

            protected void closeApplication() {
             PlatformUI.getWorkbench().close();
            }

            public void widgetSelected(SelectionEvent e) {
             //
            }

            public void widgetDefaultSelected(SelectionEvent e) {
             if (this.minimized) {
              restoreWindow();
             } else {
              minimizeWindow();
             }
            }

            protected void minimizeWindow() {
             PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setMinimized(true);
             this.minimized = true;
            }

            protected void restoreWindow() {
             Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
             shell.open();
             shell.setMinimized(false);
             shell.forceActive();
             shell.forceFocus();
             this.minimized = false;
            }

            public void showMenu() {
             clearItems();
             MenuItem mi;
             MenuItem closeItem;
             mi = new MenuItem(this.menu, SWT.PUSH);
             closeItem = new MenuItem(this.menu, SWT.NONE);
             closeItem.setText("Close");
             closeItem.addSelectionListener(new SelectionAdapter() {
              public void widgetSelected(SelectionEvent e) {
               closeApplication();
              }
             });
             this.menuItems = new MenuItem[] { mi, closeItem };

             if (this.minimized) {
              mi.setText("Maximize");
              mi.addSelectionListener(this.restoreWindowListener);
             } else {
              mi.setText("Minimize");
              mi.addSelectionListener(this.minimizeWindowListener);
             }
             this.menu.setVisible(true);
            }

            private void clearItems() {
             for (int i = 0; i < this.menuItems.length; i++) {
              MenuItem item = this.menuItems[i];
              item.removeSelectionListener(this.minimizeWindowListener);
              item.removeSelectionListener(this.restoreWindowListener);
              this.menuItems[i].dispose();
             }
            }

            public void handleEvent(Event event) {
             showMenu();
            }

           }

          posted on 2006-01-13 15:31 亙古頑石 閱讀(886) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 新巴尔虎右旗| 筠连县| 白玉县| 大兴区| 柳河县| 庄浪县| 桂平市| 江城| 乐安县| 天水市| 嵊泗县| 滕州市| 慈利县| 白河县| 南郑县| 大连市| 巴彦淖尔市| 平顶山市| 鲁甸县| 大竹县| 凌云县| 亳州市| 井陉县| 丰宁| 黑河市| 延长县| 静安区| 南华县| 安福县| 萨迦县| 濉溪县| 永寿县| 含山县| 渝北区| 昌平区| 康保县| 白城市| 哈尔滨市| 桐乡市| 大冶市| 资兴市|