我有一个主要的父shell和一个子shell。子shell用于某些设置。设置完成后。我想关闭子shell并继续使用父shell。我正在使用display_Settings.dispose();
来关闭子shell。但这会关闭两个shell(父级和子级)。当我只点击子shell的红色X按钮时,只有子shell关闭。这就是我要的。我怎样才能实现它?此外,当子shell打开时,可以操作/单击父shell上的按钮。我想禁止这个,直到我完成了子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类是两个不同的类,下面是我如何打开父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都关闭,实际上它们的名称并不重要,因为它们都是不同的类。如果你能帮助我,我会很高兴的!
答案 0 :(得分:0)
下面是一个带有按钮的Shell示例,该按钮在选中时会对模态子Shell进行操作。
< - language:lang-java - >
Display display = new Display();
final Shell shell = new Shell( display );
shell.setText( "Shell" );
shell.setSize( 200, 200 );
shell.setLayout( new FillLayout() );
Button button = new Button( shell, SWT.PUSH );
button.setText( "Open Modal Child Shell" );
button.addListener( SWT.Selection, new Listener() {
@Override
public void handleEvent( Event event ) {
Shell dialog = new Shell( shell, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM );
dialog.setText( "Dialog" );
dialog.setSize( 200, 200 );
dialog.open();
}
} );
shell.open();
while( !shell.isDisposed() ) {
if( !display.readAndDispatch() ) {
display.sleep();
}
}
display.dispose();
打开对话框时,会阻止与主shell的所有交互:这是通过SWT.APPLICATION_MODAL
样式标志实现的。 SWT.DIALOG_TRIM
样式标志向shell添加带有关闭按钮的标题栏,但不需要获取模态行为。
可以使用Esc
关闭对话框shell。代码片段末尾的主循环使应用程序保持活动状态,直到主shell关闭。