Display.getActiveShell()似乎只考虑一个Shell是活跃的,如果它的重点.如果此时另一个应用程序的焦点意味着Display.getActiveShell()返回null.
我需要一个方法,总是告诉我哪个是关注我的SWT应用程序的Shell,即使我的SWT应用程序没有关注焦点.
我很快就把这段代码一起破解了,虽然有时我会得到一个AssertionException:
public static Shell getActiveShell() {
Display display = Display.getDefault();
Shell result = display.getActiveShell();
if (result == null) {
Shell[] shells = display.getShells();
for (Shell shell : shells) {
if (shell.getShells().length == 0) {
if (result != null)
throw new AssertionException();
result = shell;
}
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
除了编写自己的方法之外,有没有任何标准的方法来解决这个问题?
Rüd*_*ann 10
最近,我遇到了类似的问题,虽然你可能找到了一个解决方案,但我想与大家分享以供将来参考.
在ShellActivationTracker增加了一个显示过滤器,监听Activate事件和-如果激活控件是一个Shell-记得最近激活Shell.因此,即使您的应用程序当前未处于活动状态/焦点,您也可以查询(最后)活动shell.
class ShellActivationTracker implements Listener {
Shell activeShell;
ShellActivationTracker(Display display) {
activeShell = display.getActiveShell();
display.addFilter(SWT.Activate, this);
}
@Override
public void handleEvent(Event event) {
if (event.widget instanceof Shell) {
activeShell = (Shell)event.widget;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8161 次 |
| 最近记录: |