Разница между дисплеем и оболочкой - PullRequest
4 голосов
/ 24 октября 2010

Типичный пример кода SWT выглядит следующим образом:

final Display display = Display.getDefault();
final Shell shell = createMyShell(display);
shell.open();
while (!shell.isDisposed()) {
    if (!display.readAndDispatch()) {
        display.sleep();
    }
}

В чем разница между Display и Shell?
Если необходимо отобразить несколько окон, каждое ли окнонужен собственный цикл?

Ответы [ 3 ]

6 голосов
/ 19 августа 2011

Вы можете иметь несколько оболочек с одним дисплеем и одной отправкой события цикла. Создайте отображение, создайте Shell (и) из Display, а затем запустите один цикл диспетчера событий пользовательского интерфейса. Смотри http://www.chrisnewland.com/av/111/swt-best-practice-single-display-multiple-shells

4 голосов
/ 24 октября 2010

Да, если вам нужно показать несколько окон (оболочек), у вас должен быть цикл для каждого из них.

Но в приложении есть только один Display объект, который необходимо создать.

1 голос
/ 19 ноября 2013

ChrisWhoCodes совершенно правильно.Следующий код реализует его модель.

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class MultipleShells {
  public MultipleShells(Display display) {
    Shell[]             shells;
    MainWindows         mainWindow;
    mainWindow = new MainWindows(display, "Shell 1");    
    mainWindow = new MainWindows(display, "Shell 2");

    while (!display.isDisposed()) {
      if (!display.readAndDispatch()) {
        shells = display.getShells();
        if (shells.length == 0)
          break;
        display.sleep();
      }
    }
  }

  public static void main(String[] args) {
    Display display = new Display();
    MultipleShells mainApp = new MultipleShells(display);
    display.dispose();
  }
}  

class MainWindows {
    protected MainWindows(Display parent, String title) {  
    Shell               mainShell;
    mainShell = new Shell(parent);
    mainShell.setText(title);
    mainShell.open();
  }  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...