【问题标题】:Modeless shell not visible after set visible to true将可见设置为 true 后,无模式外壳不可见
【发布时间】:2015-12-22 00:23:24
【问题描述】:

我正在使用 SWT 4.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(已调试),但我看不到带有“测试”消息的窗口。始终只有主窗口可见。

【问题讨论】:

    标签: java window swt visibility


    【解决方案1】:

    (这不一定能回答问题,但在评论中发布代码是行不通的)

    我认为问题一定出在您遗漏的代码中。如果我像这样完成提供的代码,它会按预期工作:

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

    单击主外壳,覆盖外壳将打开。请注意,覆盖外壳只有一个细黑色边框,没有标题栏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多