3

ここでの別の議論によると、私は次のようなモーダルビューを開こうとします。

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();
}

目的のウィンドウが開きますが、モーダルではありません。メインシェルにアクセスして、同じモーダルダイアログの別のインスタンスを開くことができます。誰かが私を正しい方向に向けることができますか?

サンクス、マーカス

4

2 に答える 2

8

org.eclipse.jface.dialogs.Dialogボタンを使用して独自のシェルを作成するのではなく、 拡張して独自のJFaceダイアログを作成することを強くお勧めします。これは本当に良いチュートリアルです。

コンストラクター内で呼び出すことができますsetShellStyle(SWT.CLOSE | SWT.TITLE | SWT.BORDER | SWT.OK | SWT.APPLICATION_MODAL);。これにより、メインシェルをパラメーターとしてコンストラクターを呼び出すと、このダイアログが完全にモーダルになります。このような:

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

parentShellGUIのメインシェルはどこにありますか。

于 2012-08-25T08:02:46.107 に答える
0

今日、別のクラスで定義されたポップアップウィンドウを作成するときに、この問題が発生しました。

popup_shell = new Shell(Display.getCurrent(), SWT.PRIMARY_MODAL | SWT.DIALOG_TRIM)新しいウィンドウのコンストラクター内のようなものを使用していました。

代わりに、次のように、親ウィンドウからシェルを渡す場合:

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

その後、正しく動作します。

私の推測では、両方ともApplicationRunner.getApp().getShell().getDisplay()Display.getCurrent()親ウィンドウに接続されていない完全に新しいシェルになるため、primary_modalは効果がありません。

于 2016-07-07T13:58:44.330 に答える