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 亙古頑石 閱讀(887) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 稻城县| 禄劝| 江津市| 广饶县| 沙雅县| 志丹县| 巫溪县| 南汇区| 德安县| 城口县| 黔西| 阜新市| 清丰县| 昭平县| 开远市| 喜德县| 黔西县| 大洼县| 宝兴县| 岚皋县| 山阳县| 罗定市| 恩施市| 上栗县| 南开区| 梁河县| 竹溪县| 抚顺市| 瓮安县| 牡丹江市| 和顺县| 安化县| 阜康市| 南安市| 龙井市| 岳阳市| 洛扎县| 柞水县| 彰化县| 镶黄旗| 晋江市|