Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将visible设置为true后,无模式shell不可见_Java_Window_Swt_Visibility - Fatal编程技术网

Java 将visible设置为true后,无模式shell不可见

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

我正在使用SWT4.4.2(win32)为一个简单的测试应用程序构建图形用户界面。
通过按下按钮或菜单项,我想显示一个新窗口。但此窗口不应是模式对话框。它应该是一种覆盖窗口,这样应用程序就不会被阻止

首先,在启动时,我将创建程序的所有必要组件:

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();
}
单击主壳,将打开覆盖壳。请注意,覆盖壳只有一个薄的黑色边框,没有标题栏