loc*_*cka 5 java eclipse rcp swt
我有一个WizardDialog包含许多页面的 SWT 。当这个对话框第一次打开时,我必须检查一些条件,如果满足这些条件,我需要在新打开的对话框上显示一个弹出窗口。
所以我有这个代码来监听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();
Run Code Online (Sandbox Code Playgroud)
除了它被称为太快了!调用处理程序时对话框不可见。我的消息框出现在对话框可见之前,并且对话框仅在我关闭消息框时出现。
很明显,这SWT.Show是不可靠的,至少在Window我运行它的地方是这样。我也尝试将此代码放入ShellListener激活中,但这甚至发生在SWT.Show上面的示例之前。
那么当对话框可见时如何可靠地显示消息框?
计划 B 是一个基于脏定时器的黑客,其中一个定时器被设置为在未来 200 毫秒内触发,并希望它在对话框可见时触发,但显然这可能会引入它自己的问题。
dialog.open()重写你的类上的方法怎么样WizardDialog?重写方法的第一行将调用super.open(),这将使其可见。只需将您的自定义代码放在该方法中即可.open()。
您上面采用的方法的问题似乎是它响应 Show事件,这只是通知已请求 Show ,而不是对话框可见。Show 事件很可能被设计为让您知道什么时候将要显示某些内容,并在显示之前采取一些操作,正如您所经历的那样。
| 归档时间: |
|
| 查看次数: |
10873 次 |
| 最近记录: |