Display和Shell之间的区别

时间:2010-10-24 13:58:52

标签: java swt

典型的SWT示例代码如下所示:

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

DisplayShell之间的区别是什么? 如果必须显示多个窗口,每个窗口都需要一个自己的循环吗?

3 个答案:

答案 0 :(得分:6)

您可以将多个shell与一个Display和一个while循环处理事件分派。创建显示,从Display创建Shell,然后启动单个UI事件调度程序循环。见http://www.chrisnewland.com/av/111/swt-best-practice-single-display-multiple-shells

答案 1 :(得分:4)

是的,如果你必须显示多个窗口(shell),那么每个窗口都必须有一个循环。

但是您需要在应用程序中只创建一个Display对象。

答案 2 :(得分:1)

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