【发布时间】:2011-11-15 07:31:20
【问题描述】:
我有一个 SWT WizardDialog 有很多页。当此对话框首次打开时,我必须检查某些条件,如果满足这些条件,我需要在新打开的对话框上显示一个弹出窗口。
所以我有这段代码来监听SWT.Show 事件。事件监听器响应SWT.Show 进行测试并显示一个消息框:
final WizardDialog dialog = new WizardDialog(shell, wizard);
dialog.setTitle("New Wizard");
dialog.create();
dialog.getShell().addListener(SWT.Show, new Listener()
{
private boolean firstShowing = true;
@Override
public void handleEvent(Event event)
{
if (firstShowing && someConditionExists())
{
MessageBox messageBox = new MessageBox(dialog.getShell(), SWT.OK
| SWT.ICON_WARNING);
messageBox.setMessage("Test");
messageBox.open();
firstShowing = false;
}
}
});
dialog.open();
除非它调用得太早了!调用处理程序时,该对话框不可见。我的消息框在对话框可见之前出现,并且只有在我关闭消息框时才会出现对话框。
很明显SWT.Show 是不可靠的,至少在我运行它的Windows 上。我还尝试在激活时将此代码放入ShellListener,但这甚至发生在上面的SWT.Show 示例之前。
那么当对话框可见时如何可靠地显示消息框?
Plan B 是一个基于脏计时器的 hack,其中一个计时器被设置为在未来 200 毫秒内触发,并希望它在对话框可见时触发,但显然这可能会引入它自己的问题。
【问题讨论】: