swt模态对话框非模态

qvk1mo1f  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(567)

根据这里的另一个讨论,我尝试打开这样一个模态视图:

  1. public void widgetSelected(SelectionEvent e) {
  2. final Shell dialogShell = new Shell(ApplicationRunner.getApp()
  3. .getShell().getDisplay(), SWT.PRIMARY_MODAL | SWT.SHEET);
  4. dialogShell.setLayout(new FillLayout());
  5. Button closeButton = new Button(dialogShell, SWT.PUSH);
  6. closeButton.setText("Close");
  7. closeButton.addSelectionListener(new SelectionListener() {
  8. public void widgetSelected(SelectionEvent e) {
  9. dialogShell.dispose();
  10. }
  11. @Override
  12. public void widgetDefaultSelected(SelectionEvent arg0) {
  13. // TODO Auto-generated method stub
  14. }
  15. });
  16. dialogShell.setDefaultButton(closeButton);
  17. dialogShell.addDisposeListener(new DisposeListener() {
  18. public void widgetDisposed(DisposeEvent e) {
  19. System.out.println("Modal dialog closed");
  20. }
  21. });
  22. dialogShell.pack();
  23. dialogShell.open();
  24. }

它会打开所需的窗口,但不是模态窗口。我可以访问主shell并打开同一模态对话框的另一个示例。有人能给我指出正确的方向吗?
谢谢,马库斯

ujv3wf0j

ujv3wf0j1#

我强烈建议您通过扩展 org.eclipse.jface.dialogs.Dialog 而不是用按钮创建自己的shell。这是一个非常好的教程。
你可以打电话给承包商 setShellStyle(SWT.CLOSE | SWT.TITLE | SWT.BORDER | SWT.OK | SWT.APPLICATION_MODAL); 这将使这个对话框完全模态化,如果你用你的主shell作为参数调用构造函数。这样地:

  1. public CheckboxDialog(Shell parentShell) {
  2. super(parentShell);
  3. setShellStyle(SWT.CLOSE | SWT.TITLE | SWT.BORDER | SWT.OK | SWT.APPLICATION_MODAL);
  4. setBlockOnOpen(true);
  5. }

哪里 parentShell 是gui的主shell。

798qvoo8

798qvoo82#

我今天遇到了这个问题,在创建一个单独类中定义的弹出窗口时。
我用的是 popup_shell = new Shell(Display.getCurrent(), SWT.PRIMARY_MODAL | SWT.DIALOG_TRIM) 在新窗口的构造函数中。
如果我从父窗口传入shell,如下所示:

  1. public PopupWindow(Shell main_shell)
  2. {
  3. popup_shell = new Shell(main_shell, SWT.PRIMARY_MODAL | SWT.DIALOG_TRIM);
  4. }

那它就正常工作了。
我猜两者都是 ApplicationRunner.getApp().getShell().getDisplay() 以及 Display.getCurrent() 结果是一个全新的shell,与父窗口没有连接,因此主模式没有任何效果。

相关问题