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

时间:2015-09-24 11:55:11

标签: java window swt visibility

我正在使用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(已调试)但我看不到带有“Test”消息的窗口。总是只有主窗口可见。

1 个答案:

答案 0 :(得分:0)

(这不一定能回答问题,但在评论中发布代码不会起作用)

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

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(DateTime fromDate, DateTime toDate, string comment)
{
    using (IDatabaseLayer db = new DatabaseLayer())
    {
        if (fromDate != null || toDate != null)
        {
            db.InsertVacation(Constants.CurrentUser(User.Identity.Name), fromDate, toDate, comment);
            ViewData.Model = db.GetUserVacations(Constants.CurrentUser(User.Identity.Name));
        }
    }

    SendVacationMail(fromDate, toDate, comment);
    ViewData["posted"] = true;

    return View();
}

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

Screenshot of overlay shell