根据这里的另一个讨论,我尝试打开这样一个模态视图:
public void widgetSelected(SelectionEvent e) {
final Shell dialogShell = new Shell(ApplicationRunner.getApp()
.getShell().getDisplay(), SWT.PRIMARY_MODAL | SWT.SHEET);
dialogShell.setLayout(new FillLayout());
Button closeButton = new Button(dialogShell, SWT.PUSH);
closeButton.setText("Close");
closeButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
dialogShell.dispose();
}
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
// TODO Auto-generated method stub
}
});
dialogShell.setDefaultButton(closeButton);
dialogShell.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
System.out.println("Modal dialog closed");
}
});
dialogShell.pack();
dialogShell.open();
}
它会打开所需的窗口,但不是模态窗口。我可以访问主shell并打开同一模态对话框的另一个示例。有人能给我指出正确的方向吗?
谢谢,马库斯
2条答案
按热度按时间ujv3wf0j1#
我强烈建议您通过扩展
org.eclipse.jface.dialogs.Dialog
而不是用按钮创建自己的shell。这是一个非常好的教程。你可以打电话给承包商
setShellStyle(SWT.CLOSE | SWT.TITLE | SWT.BORDER | SWT.OK | SWT.APPLICATION_MODAL);
这将使这个对话框完全模态化,如果你用你的主shell作为参数调用构造函数。这样地:哪里
parentShell
是gui的主shell。798qvoo82#
我今天遇到了这个问题,在创建一个单独类中定义的弹出窗口时。
我用的是
popup_shell = new Shell(Display.getCurrent(), SWT.PRIMARY_MODAL | SWT.DIALOG_TRIM)
在新窗口的构造函数中。如果我从父窗口传入shell,如下所示:
那它就正常工作了。
我猜两者都是
ApplicationRunner.getApp().getShell().getDisplay()
以及Display.getCurrent()
结果是一个全新的shell,与父窗口没有连接,因此主模式没有任何效果。