我知道我可以使用这段代码告诉外壳何时关闭,

shell.addShellListener(new ShellAdapter()
{
    @Override
    public void shellClosed(ShellEvent e)
    {
        System.out.println("closed");
    }
}


但是ShellEvent对象不能告诉我是否以编程方式关闭了Shell,或者用户何时单击X按钮。

有办法说吗?

最佳答案

我花了一些时间来区分Close ShellEvent是由用户还是由系统生成。

在两种情况下都检查了ShelEvent之后,在整个ShellEvent的ObjectGraph中,唯一具有不同值的变量是captureChanged类中其范围为Displaydefault

以下代码将帮助您找到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/

10-10 07:51