我们的应用程序的首选项是共享的(即办公室中的所有用户都具有相同的权限)。为了实现这一点,我们实现了一个自定义IPreferenceStore
,用于保存和(重新)将数据加载到数据库或从数据库加载数据。
当然,当首选项窗口打开时,我们无法重新加载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));
有什么想法吗?
答案 0 :(得分:1)
Display.addFilter
, SWT.Activate
确实会在shell被激活时给出一个事件(以及许多其他事情)。出于某种原因,addListener
在我的测试中不起作用。
Display.getDefault().addFilter(SWT.Activate, listener);
widget
的{{1}}字段包含正在激活的控件。