【问题标题】:new SWT Shell without taking focus?新的 SWT Shell 没有集中注意力?
【发布时间】:2016-02-23 15:05:25
【问题描述】:

目前正在开发一个 Eclipse 插件,我想制作一个在创建/显示时不关注焦点的 Shell。

我尝试使用 SWT.NO_FOCUS 但无济于事。

如何在不将焦点从您所在的另一个应用程序/窗口上移开的情况下创建 Shell?

【问题讨论】:

    标签: java swt


    【解决方案1】:

    下面的代码将打开一个新的Shell,而不会将焦点从父级移开:

    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new GridLayout());
    
    Button button = new Button(shell, SWT.PUSH);
    button.setText("Open new Shell");
    button.addListener(SWT.Selection, (event) -> {
        Shell child = new Shell(shell);
        child.setText("Child");
        child.setVisible(true);
        child.setSize(300,200);
    });
    
    shell.pack();
    shell.open();
    
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
    

    【讨论】:

    • 我打开 shell 的方式给我带来了麻烦,我使用的是 Shell.open(),而不是 setVisible(true)。感谢您的样品。
    • @VladIlie 很高兴它对你有用。也是先打电话给open(),因为那是你通常做的事情。
    【解决方案2】:

    对于类似工具提示外壳使用:

    new Shell(parent, SWT.ON_TOP | SWT.TOOL | SWT.NO_FOCUS);
    

    【讨论】:

    • 我已经尝试过这个构造函数,但焦点仍然远离 GUI 中的其他组件。我也从这里stackoverflow.com/questions/26120040/… 尝试了 Baz 的 setEnable(false) 建议,但这似乎不会从其他应用程序中窃取焦点。
    • 向我们展示一些代码,因为这绝对适用于工具提示。
    • 我使用 open() 来显示 Shell,并且根据 API 将焦点放在它上面。 setVisible(true) 反而有所帮助。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    相关资源
    最近更新 更多