典型的SWT示例代码如下所示:
final Display display = Display.getDefault();
final Shell shell = createMyShell(display);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
Display
和Shell
之间的区别是什么?
如果必须显示多个窗口,每个窗口都需要一个自己的循环吗?
答案 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();
}
}