监听新的 shell
Listen for New Shells
我们应用程序的首选项是共享的(即办公室中的所有用户都有相同的首选项)。为此,我们实现了一个自定义 IPreferenceStore
,用于将数据保存和(重新)加载到数据库或从数据库加载数据。
当然,当首选项 window 处于打开状态时,我们不能让 IPreferenceStore
重新加载 - 至少在这种情况下我们应该传递某种信息或其他信息。所以我需要有一种方法来收听 PreferenceDialog
开场。
由于我们正在实施 Eclipse 应用程序,如果无法直接对首选项对话框做出反应,则监听 Shells
打开并检查其标题可能就足够了。
我尝试了什么:
// this only reacts to the main window changing
PlatformUI.getWorkbench().addWindowListener(new IWindowListener() { ... });
// shells (and composites in general) are missing listeners for
// adding child controls
Shell currentShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
currentShell.addListener(SWT.???, e-> System.out.println(e));
// what listeners do display even have?
Display.getDefault().addListener(SWT.???, e-> System.out.println(e));
有什么想法吗?
Display.addFilter
for SWT.Activate
确实会在 shell 被激活时给出一个事件(以及许多其他事情)。出于某种原因 addListener
在我的测试中不起作用。
Display.getDefault().addFilter(SWT.Activate, listener);
Event
的 widget
字段包含正在激活的控件。
我们应用程序的首选项是共享的(即办公室中的所有用户都有相同的首选项)。为此,我们实现了一个自定义 IPreferenceStore
,用于将数据保存和(重新)加载到数据库或从数据库加载数据。
当然,当首选项 window 处于打开状态时,我们不能让 IPreferenceStore
重新加载 - 至少在这种情况下我们应该传递某种信息或其他信息。所以我需要有一种方法来收听 PreferenceDialog
开场。
由于我们正在实施 Eclipse 应用程序,如果无法直接对首选项对话框做出反应,则监听 Shells
打开并检查其标题可能就足够了。
我尝试了什么:
// this only reacts to the main window changing
PlatformUI.getWorkbench().addWindowListener(new IWindowListener() { ... });
// shells (and composites in general) are missing listeners for
// adding child controls
Shell currentShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
currentShell.addListener(SWT.???, e-> System.out.println(e));
// what listeners do display even have?
Display.getDefault().addListener(SWT.???, e-> System.out.println(e));
有什么想法吗?
Display.addFilter
for SWT.Activate
确实会在 shell 被激活时给出一个事件(以及许多其他事情)。出于某种原因 addListener
在我的测试中不起作用。
Display.getDefault().addFilter(SWT.Activate, listener);
Event
的 widget
字段包含正在激活的控件。