gpt4 book ai didi

java - 如何检测 SWT 对话框已打开并且可见?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:15:51 25 4
gpt4 key购买 nike

我有一个包含多个页面的 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 是不可靠的,至少在我运行它的 Window 上是这样。我也试过在激活时将此代码放入 ShellListener 中,但这甚至发生在上面的 SWT.Show 示例之前。

那么当对话框可见时,如何可靠地显示消息框?

B 计划是一个基于肮脏计时器的 hack,其中一个计时器设置为在未来 200 毫秒后触发,并希望它在对话框可见时触发,但显然这可能会引入它自己的问题。

最佳答案

我在类似情况下使用(需要在应用程序窗口可见后调用 appStarted()),如下所示。

public class App extends ApplicationWindow {

@Override
protected Control createContents(Composite parent) {
// ...

getShell().addShellListener(new ShellAdapter() {

@Override
public void shellActivated(ShellEvent shellevent) {
if (!started) {
Shell s = (Shell) shellevent.getSource();
s.setVisible(true);
appStarted();
started = true;
}
}
});
}
}

也许你可以像下面这样使用:

final WizardDialog dialog = new WizardDialog(shell, wizard);
dialog.setTitle("New Wizard");
dialog.create();
dialog.getShell().addShellListener(new ShellAdapter() {

@Override
public void shellActivated(ShellEvent shellevent) {

if (firstShowing && someConditionExists()) {
Shell s = (Shell) shellevent.getSource();
s.setVisible(true);

MessageBox messageBox = new MessageBox(dialog.getShell(), SWT.OK | SWT.ICON_WARNING);
messageBox.setMessage("Test");
messageBox.open();
firstShowing = false;
}

}
});
dialog.open();

关于java - 如何检测 SWT 对话框已打开并且可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7387818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com