2015-09-24 67 views
0

我正在使用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"); 
} 

后来我查叠加窗口是否viisble因为能见度取决于某些程序的选项,如果窗口在这个隐藏时间我想表现出来:

if (!overlayWindow.getVisible()) { 
    overlayWindow.setVisible(true); 
    overlayWindow.setFocus(); 
} 

我在SWT很新,所以我希望我没有做错什么。
我的问题是,可见性设置为true(调试),但我不能看到与“测试”消息的窗口。总是只有主窗口可见。

回答

0

(这并不不一定回答这个问题,但在评论张贴代码将无法正常工作)

,我认为这个问题必须在你离开了代码的某个地方。如果我完成像这样提供的代码,它按预期工作:

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

点击主壳和覆盖壳将打开。请注意,重叠式外壳只有一个很薄的黑色边框,并且没有标题栏。

Screenshot of overlay shell