【发布时间】:2014-11-02 18:48:11
【问题描述】:
我有一个主要的父 shell 和一个子 shell。子外壳用于某些设置。设置完成后。我想关闭子 shell 并继续使用父 shell。我正在使用display_Settings.dispose(); 关闭子外壳。但这会关闭两个外壳(父母和孩子)。当我只单击子外壳的红色 X 按钮时,只有子外壳关闭。这就是我要的。我怎样才能实现它?此外,当子外壳打开时,可以操作/单击父外壳上的按钮。在我完成子 shell 中的设置之前,我想禁止这样做(直到我关闭子 shell)。
以下是我在父 shell 中打开子 shell 的方法:
btnSettings.addListener (SWT.Selection, new Listener () {
@Override
public void handleEvent (Event event) { // Button Settings event
try {
my_Obect = new My_Object();
Display display_Settings = Display.getDefault();
Child_Settings shell_Settings = new Child_Settings(display_Settings, my_Object);
shell_Settings.open();
shell_Settings.layout();
while (!shell_Settings.isDisposed()) {
if (!display_Settings.readAndDispatch()) {
display_Settings.sleep();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
父 GUI 类和子 GUI 类是两个不同的类,下面是我打开 Parent shell 的方法:
public static void main(String args[]) {
try {
Display display = Display.getDefault();
GUI_Test shell = new GUI_Test(display);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
虽然 Display 变量不同,但两个 shell 都关闭,实际上它们的名称并不重要,因为它们都是不同的类。如果你能帮助我,我会很高兴!
【问题讨论】:
-
请注意,您不需要多个事件循环(
readAndDispatch()的东西。一个就足够了。 -
@Baz
readAndDispatch()属于不同的对象? -
你有两个
while事件循环。您只需要main方法中的那个