Java 将visible设置为true后,无模式shell不可见
我正在使用SWT4.4.2(win32)为一个简单的测试应用程序构建图形用户界面。Java 将visible设置为true后,无模式shell不可见,java,window,swt,visibility,Java,Window,Swt,Visibility,我正在使用SWT4.4.2(win32)为一个简单的测试应用程序构建图形用户界面。 通过按下按钮或菜单项,我想显示一个新窗口。但此窗口不应是模式对话框。它应该是一种覆盖窗口,这样应用程序就不会被阻止 首先,在启动时,我将创建程序的所有必要组件: private void initUI() { mainWindow = new Shell(display); ... overlayWindow = new Shell(mainWindow, SWT.MODELESS);
通过按下按钮或菜单项,我想显示一个新窗口。但此窗口不应是模式对话框。它应该是一种覆盖窗口,这样应用程序就不会被阻止 首先,在启动时,我将创建程序的所有必要组件:
private void initUI() {
mainWindow = new Shell(display);
...
overlayWindow = new Shell(mainWindow, SWT.MODELESS);
overlayWindow.setLocation(200, 200);
overlayWindow.setSize(160, 33);
overlayWindow.setText("Overlay");
overlayWindow.setVisible(false);
label = new Label(overlayWindow, SWT.CENTER);
label.setLocation(10, 10);
label.setSize(140, 13);
label.setText("Test");
}
稍后,我检查覆盖窗口是否可见,因为可见性取决于某些程序选项,如果此时窗口隐藏,我想显示它:
if (!overlayWindow.getVisible()) {
overlayWindow.setVisible(true);
overlayWindow.setFocus();
}
我是SWT的新手,所以我希望我没有做错什么。我的问题是可见性设置为true(已调试),但我看不到带有“Test”消息的窗口。始终只有主窗口可见。(这不一定回答问题,但在注释中发布代码是不起作用的) 我想问题一定出在你遗漏的代码中。如果我像这样完成提供的代码,它将按预期工作:
public static void main( String[] args ) {
Display display = new Display();
// create and open main shell
Shell mainShell = new Shell( display );
mainShell.setText( "Main" );
mainShell.open();
// create overlay shell
final Shell overlayShell = new Shell( mainShell, SWT.MODELESS );
overlayShell.setLocation( 200, 200 );
overlayShell.setSize( 160, 33 );
overlayShell.setText( "Overlay" );
// add mouse-down listener that opens overlay shell
mainShell.addListener( SWT.MouseDown, new Listener() {
@Override
public void handleEvent( Event event ) {
overlayShell.setVisible( true );
overlayShell.setFocus();
}
} );
while( !mainShell.isDisposed() ) {
if( !display.readAndDispatch() )
display.sleep();
}
display.dispose();
}
单击主壳,将打开覆盖壳。请注意,覆盖壳只有一个薄的黑色边框,没有标题栏