//注冊窗口監聽 shell.addShellListener(new ShellAdapter() { //點擊窗口最小化按鈕時,窗口隱藏,托盤中顯示圖標 public void shellIconified(ShellEvent e) { toggleDisplay(shell, tray); } //點擊窗口關閉時,并不終止程序,而是隱藏窗口,同時托盤中顯示圖標 public void shellClosed(ShellEvent e) { e.doit = false; //取消關閉操作 toggleDisplay(shell, tray); } }); shell.setSize(320, 240); center(shell); shell.open(); while(!shell.isDisposed()) { if(!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } /** * 窗口是可見狀態時,則隱藏窗口,在托盤中顯示程序圖標 * 窗口是隱藏狀態時,則顯示窗口,將托盤中圖標刪除 */ private static void toggleDisplay(Shell shell, Tray tray) { try { shell.setVisible(!shell.isVisible()); //控制窗口顯示 tray.getItem(0).setVisible(!shell.isVisible()); //控制托盤圖標顯示 //如果窗口是顯示狀態 if(shell.getVisible()) { shell.setMinimized(false); //阻止窗口最小化 shell.setActive(); //激活窗口 } } catch(Exception e) { e.printStackTrace(); } } /** * 窗口居中顯示 */ private static void center(Shell shell) { Monitor monitor = shell.getMonitor(); Rectangle bounds = monitor.getBounds(); Rectangle rect = shell.getBounds(); int x = bounds.x + (bounds.width - rect.width)/2; int y = bounds.y + (bounds.height - rect.height)/2; shell.setLocation(x, y); } } |