在某些情况下,我想在长时间运行的查询时向用户显示一个带有进度条的模式窗口。(对于单个 UI 项,我使用该方法setEnabled (true/ false)
,但我想要更优雅的解决方案。)
例如,在入口点,直到所有元素未初始化 -
public void onModuleLoad() {
// initialization of the interface here
}
还有,例如,在完成依赖列表框时(关系一对多)
@UiHandler("listBox")
public void onListBoxChange(ChangeEvent event) {
someService.findDependencies(id, new AsyncCallback<List<DependencyDTO>>() {
public void onFailure(Throwable caught) {
// exception handling here
}
public void onSuccess(List<DependencyDTO> data) {
// listBox filling here
}
});
}
在Vaadin应用程序中,我可以将以下代码添加到侦听器中,例如 -
...
Thread thread = new Thread() {
@Override
public void run() {
// some initialization here
window.removeWindow(blockerWindow);
}
};
thread.start();
blockerWindow = new BlockerWindow();
window.addWindow(blockerWindow);
...
就我而言,我可以使用以下方法显示带有进度条的窗口 -
private void freezeInterface() {
blockerWindow = new BlockerWindow()
blockerWindow.setGlassEnabled(true);
blockerWindow.setAnimationEnabled(true);
blockerWindow.setModal(true);
blockerWindow.center();
blockerWindow.show();
}
以及隐藏窗口的方法 -
private void unfreezeInterface() {
blockerWindow.hide();
}
问题是,何时隐藏窗口。
例如,在入口点有一系列查询 -
...
service1.findDependenciesForListBox1(id1, new AsyncCallback<List<Dependency1DTO>>() {
public void onFailure(Throwable caught) {
// exception handling here
}
public void onSuccess(List<Dependency1DTO> data) {
// listBox1 filling here
}
});
service2.findDependenciesForListBox2(id2, new AsyncCallback<List<Dependency2DTO>>() {
public void onFailure(Throwable caught) {
// exception handling here
}
public void onSuccess(List<Dependency2DTO> data) {
// listBox2 filling here
}
});
serviceN.findDependenciesForListBoxN(idN, new AsyncCallback<List<DependencyNDTO>>() {
public void onFailure(Throwable caught) {
// exception handling here
}
public void onSuccess(List<DependencyNDTO> data) {
// listBoxN filling here
}
});
等等。
答案以以前未知的顺序出现,并以一种onSuccess
我无法做到的方法隐藏窗口。
我可以使用 a timer
,但我事先不知道要传入哪个时间schedule
。
...
blockerWindow.show();
private void unfreezeInterface() {
timer = new Timer() {
public void run() {
blockerWindow.hide();
}
};
timer.schedule(15000);
}
...
如何正确实现这一点GWT
?