Как дождаться закрытия оболочки от другой оболочки в SWT? - PullRequest
2 голосов
/ 28 февраля 2012

Я создаю программу в SWT.У меня есть первая оболочка, на которой есть кнопка «Добавить пользователя».Когда вы нажимаете на кнопку, появляется вторая оболочка.В этом случае первая оболочка все еще может быть кликабельной и фокусируемой.Я не могу понять, как избежать фокусировки первой оболочки до тех пор, пока вторая не будет закрыта.

Это поведение является поведением диалогов по умолчанию, но я хочу иметь то же поведение с оболочками.Вы знаете, как я могу получить это?

Код, который я использую для открытия второй оболочки, таков:

Display display = Menu.this.getDisplay();
AddEditUser shell = new AddEditUser(display);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
    if (!display.readAndDispatch()) {
        display.sleep();
    }
}

Спасибо

Я следую вашим советам, и теперьповедение в порядке, но теперь вторая оболочка не имеет верхней панели, как показано на рисунке.window without top bar

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Откройте вторую оболочку со стилем SWT.APPLICATION_MODAL

1 голос
/ 28 февраля 2012

Используйте SWT.SYSTEM_MODAL или SWT.APPLICATION_MODAL для второго типа оболочек

enter image description here

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;


public class ShellTest {

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

        Button b = new Button(shell, SWT.PUSH);
        b.setText("Open Shell");
        b.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                openNewShell(shell);
            }
        });
        shell.setSize(250, 150);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

    protected static void openNewShell(final Shell shell) 
    {
        Shell child = new Shell(shell, SWT.TITLE|SWT.SYSTEM_MODAL| SWT.CLOSE | SWT.MAX);
        child.setSize(100, 100);
        child.setLayout(new GridLayout());
        child.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        child.open();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...