Eclipse Plugin: Открытие нового окна из WorkBench - PullRequest
1 голос
/ 13 мая 2009

Я новичок в разработке плагина Eclipse, и мне удалось проделать большую работу. Вот где я застрял. У меня есть вид с кнопкой. Когда пользователь нажимает кнопку, я хочу открыть новое окно (окно представляет собой форму с текстовыми областями, кнопками и другими виджетами SWT). Я закончил создание окна.

После компиляции приложения я получаю новый экземпляр рабочей среды eclipse (как и ожидалось), но когда я открываю представление и нажимаю кнопку, окно не отображается. Это фрагмент кода окна:

public class NewWindow {
    private Display display;
    private Shell shell;

    public NewWindow(){

        this.display = new Display();
    shell = new Shell(displaySWT.TITLE | SWT.MIN | SWT.CLOSE);
    shell.setText("fffffffffffff");

              // additional code here
               ...
               ...

    shell.open();
    this.shellSleep();  // this methode is implemented in my code
}

Это фрагмент кода, который вызывает этот класс:

... ...

this.btnCreateNewQuery.addSelectionListener(new SelectionListener(){
            public void widgetDefaultSelected(SelectionEvent e){

            }
            public void widgetSelected(SelectionEvent e){                                   NewWindow b = new NewWindow();

        }
    });

... ...

Я не понимаю, почему окно не появляется. Я пытался это исправить, но пока ничего не нашел. Я читаю что-то на этом сайте, но я не понимаю, что они имели в виду. это ссылка: Как получить окно рабочей среды для открытия модального диалога в проекте на основе Eclipse?

Ответы [ 2 ]

3 голосов
/ 13 мая 2009

Эдди, это довольно легко решить. Только не создавайте новый дисплей. Повторно используйте один из верстака:

public NewWindow() {
        this.display = PlatformUI.getWorkbench().getDisplay();
        shell = new Shell(display, SWT.TITLE | SWT.MIN | SWT.CLOSE);
        shell.setText("fffffffffffff");

              // additional code here
               ...
               ...

        shell.open();
        this.shellSleep();  // this methode is implemented in my code
}

В качестве альтернативы вы можете отклонить переменную отображения и просто передать null конструктору Shell.

0 голосов
/ 13 мая 2009

Не думаю, что вы хотите создать новую оболочку. Вместо этого передайте родительский Shell в ваш новый класс. Мне проще расширить один из классов Dialog (или самого Dialog) для новых окон. Затем в конструкторе вы можете вызвать super (Shell parent), чтобы инициализировать для вас все окружение / GUI, а затем вы можете расположить область диалога так, как вам нужно. Затем, чтобы открыть новое окно, вы делаете dialog.open ().

...