我知道我可以使用这段代码告诉外壳何时关闭,
shell.addShellListener(new ShellAdapter()
{
@Override
public void shellClosed(ShellEvent e)
{
System.out.println("closed");
}
}
但是
ShellEvent
对象不能告诉我是否以编程方式关闭了Shell,或者用户何时单击X按钮。有办法说吗?
最佳答案
我花了一些时间来区分Close ShellEvent
是由用户还是由系统生成。
在两种情况下都检查了ShelEvent
之后,在整个ShellEvent
的ObjectGraph中,唯一具有不同值的变量是captureChanged
类中其范围为Display
的default
。
以下代码将帮助您找到ShellEvent
的来源
shell.addShellListener(new ShellAdapter() {
@Override
public void shellClosed(ShellEvent e) {
Field f = Display.class.getDeclaredField("captureChanged");
f.setAccessible(true);
System.out.println("captureChanged = " + f.get(e.display)); //true = If User triggered the Event
System.out.println("closed");
}
});
关于java - 我如何知道SWT Shell是通过编程方式还是由用户关闭?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17621157/