1

SWT JFace ダイアログを使用しています。

OK ボタンにリスナーを追加しました。ユーザーが OK ボタンをクリックすると、メッセージ ボックスを表示したいと思います。このステップの問題は、[OK] ボタンをクリックすると、シェルが破棄されることです。この動作を防ぐにはどうすればよいですか?

4

1 に答える 1

2

次のコードは、[OK] ボタンでダイアログが閉じられないようにします。メソッドで呼び出さないthis.close()でください:okPressed()

public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    new OptionsDialog(shell).open();

    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    display.dispose();
}

private static class OptionsDialog extends Dialog {

    private Composite composite;

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

    protected Control createDialogArea(Composite parent) {
        this.composite = (Composite) super.createDialogArea(parent);

        GridLayout layout = new GridLayout(1, false);
        layout.marginHeight = 5;
        layout.marginWidth = 10;

        composite.setLayout(layout);

        createContent();

        return composite;
    }

    private void createContent()
    {
        /* add your widgets */
    }

    protected void configureShell(Shell newShell)
    {
        super.configureShell(newShell);
        newShell.setText("Shell name");
    }

    public void okPressed()
    {
        /* DO NOTHING HERE!!! */
        //this.close();
    }
}
于 2012-09-09T08:57:05.677 に答える