3
A
回答
2
我不认为你可以禁用它(如使其灰色),因为它是由底层操作系统窗口管理器直接管理,而不是由SWT。
您可以添加,虽然监听器,以忽略任何关闭事件,有点像this snippet:
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
public class Snippet99 {
public static void main (String [] args) {
Display display = new Display();
final Shell shell = new Shell (display);
shell.addListener (SWT.Close, new Listener() {
public void handleEvent (Event event) {
int style = SWT.APPLICATION_MODAL | SWT.YES | SWT.NO;
MessageBox messageBox = new MessageBox (shell, style);
messageBox.setText ("Information");
messageBox.setMessage ("Close the shell?");
event.doit = messageBox.open() == SWT.YES;
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
}
在你的情况,只需设置“event.doit
”到false
。
4
如果用户想要关闭应用程序,另一种可能是“图标化”应用程序,这意味着应用程序被移入托盘项目中。将以下内容添加到ApplicationWorkbenchWindowAdvisor:
a。覆盖postWindowOpen
public void postWindowOpen() { Shell shell = getWindowConfigurer().getWindow().getShell(); boolean trayEnabled = false; trayEnabled = enableTray(); }
b。执行托盘支持
/* Enable System-Tray Support */ private boolean enableTray() { /* Avoid that this is being called redundantly */ if (this.fTrayEnabled) { return true; } /* Only enable for Primary Window */ IWorkbenchWindow primaryWindow = PlatformUI.getWorkbench().getWorkbenchWindows()[0]; if (primaryWindow == null || !primaryWindow.equals(getWindowConfigurer().getWindow())) { return false; } final Shell shell = primaryWindow.getShell(); final Tray tray = shell.getDisplay().getSystemTray(); /* Tray not support on the OS */ if (tray == null) { return false; } /* Create Item in Tray */ this.fTrayItem = new TrayItem(tray, SWT.NONE); this.fTrayItem.setToolTipText(Platform.getProduct().getName()); this.fTrayEnabled = true; this.fTrayItem.setVisible(false); /* Apply Image */ this.fTrayItem.setImage(trayIcon); /* Minimize to Tray on Shell Iconify if set */ this.fTrayShellListener = new ShellAdapter() { @Override public void shellIconified(final ShellEvent e) { if (!ApplicationWorkbenchWindowAdvisor.this.fBlockIconifyEvent && ApplicationWorkbenchWindowAdvisor.this.fMinimizeFromClose) { moveToTray(shell); } } }; shell.addShellListener(this.fTrayShellListener); /* Show Menu on Selection */ this.fTrayItem.addListener(SWT.MenuDetect, new Listener() { public void handleEvent(final Event event) { MenuManager trayMenu = new MenuManager(); /* Restore */ trayMenu.add(new ContributionItem() { @Override public void fill(final Menu menu, final int index) { MenuItem restoreItem = new MenuItem(menu, SWT.PUSH); restoreItem.setText("Restore from Tray"); restoreItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { restoreFromTray(shell); } }); menu.setDefaultItem(restoreItem); } }); /* Separator */ trayMenu.add(new Separator()); /* Other Items */ ApplicationWorkbenchWindowAdvisor.this.fActionBarAdvisor.fillTrayItem(trayMenu); Menu menu = trayMenu.createContextMenu(shell); menu.setVisible(true); } }); /* Handle DefaultSelection */ this.fTrayItem.addListener(SWT.DefaultSelection, new Listener() { public void handleEvent(final Event event) { /* Restore from Tray */ if (!shell.isVisible()) { restoreFromTray(shell); } else { moveToTray(shell); } } }); return true; } /* Move to System Tray */ private void moveToTray(final Shell shell) { this.fTrayItem.setVisible(true); this.fBlockIconifyEvent = true; try { shell.setVisible(false); } finally { this.fBlockIconifyEvent = false; } this.fMinimizedToTray = true; /** * @param shell */ public void restoreFromTray(final Shell shell) { /* Restore Shell */ shell.setVisible(true); shell.setActive(); shell.layout(true); /* Un-Minimize if minimized */ if (shell.getMinimized()) { shell.setMinimized(false); } this.fTrayItem.setVisible(false); if (this.fTrayTeasing) { this.fTrayItem.setImage(this.trayImage); } this.fTrayTeasing = false; this.fMinimizedToTray = false; } /* Disable System-Tray Support */ private void disableTray() { /* Avoid that this is being called redundantly */ if (!this.fTrayEnabled) { return; } /* First make sure to have the Window restored */ restoreFromTray(getWindowConfigurer().getWindow().getShell()); this.fTrayEnabled = false; this.fMinimizedToTray = false; if (this.fTrayItem != null) { this.fTrayItem.dispose(); } if (this.fTrayShellListener != null) { getWindowConfigurer().getWindow().getShell().removeShellListener(this.fTrayShellListener); } }
c。覆盖preWindowShellClose
@Override public boolean preWindowShellClose() { final res = true ; this.fMinimizeFromClose = true; getWindowConfigurer().getWindow().getShell().notifyListeners(SWT.Iconify, new Event()); res = false; this.fMinimizeFromClose = false; return res; }
HTH 汤姆
相关问题
- 1. 等待在eclipse rcp应用程序退出时运行作业
- 2. 在我的eclipse rcp应用程序中禁用“Reset Perspective ...”菜单
- 3. Eclipse RCP应用程序(Indigo)上的Java退出代码13
- 4. Eclipse RCP应用程序中的NoClassDefFoundError
- 5. 使用OSGi Eclipse RCP应用程序
- 6. Eclipse RCP的禁用EditorReference/IEditorPart
- 7. MVC的Eclipse RCP应用程序
- 8. Eclipse RCP应用程序无法启动
- 9. Eclipse RCP应用程序调试
- 10. rcp eclipse应用程序的位置
- 11. 如何更新Eclipse RCP应用程序?
- 12. Eclipse 4中的常见Eclipse 4插件RCP应用程序
- 13. 使用Eclipse Classic开发Eclipse RCP应用程序
- 14. RCP应用程序和进度视图在Eclipse RCP
- 15. 将Eclipse插件添加到Eclipse RCP应用程序
- 16. 没有Eclipse GUI的Eclipse RCP应用程序
- 17. 退出应用程序按钮android
- 18. 向上按钮退出应用程序?
- 19. 使用Eclipse Look的Eclipse RCP工具栏按钮
- 20. 如何在eclipse-rcp应用程序中使用org.apache.logging.log4j.jul.LogManager?
- 21. 寻找RTF编辑器在Eclipse RCP应用程序中使用
- 22. 在其他应用程序中使用Eclipse RCP GUI
- 23. 在Eclipse RCP应用程序中使用IDE插件?
- 24. 按两次退出按钮退出AIR安卓应用程序
- 25. 按两次退出按钮退出应用程序
- 26. android按回退按钮应该退出应用程序
- 27. 从命令行运行Eclipse RCP应用程序时出错
- 28. 将Eclipse RCP应用程序导出到可运行jar文件
- 29. Android应用程序中的后退按钮无法退出应用程序
- 30. 如何禁用iPhone应用程序中的后退按钮
谢谢了很多,这帮助了我很多 – picciopiccio 2011-01-15 11:04:07
有趣的选择(没有看到它马上在时间)。 +1 – VonC 2011-01-15 12:55:35
这让我终于到了那里,但它花了很多工作。你不显示你的类变量的声明(如fBlockIconifyEvent,fMinimizeFromClose等),其中一些不是必需的。 ApplicationActionBarAdvisor中也没有默认的fillTrayItem。尽管如此,这些缺陷给了我所需的全面解决方案。 – 2013-01-03 17:00:51