我想创建自己的消息框类,以便我可以创建不同类型的消息(例如没有按钮)。对于托盘消息,我希望在5秒延迟后自动关闭。
我在网上搜索过:我发现很老的帖子暗示了ProgressIndicator或者其他一些"更新的"带推/轮询/线程的那些(4yo)。我真的很想知道在Vaadin 7.6中是否有一个简洁的解决方案。推/民对我来说理解机制似乎有点太复杂了(初学者......)。
答案 0 :(得分:3)
<强> TLDR 强>: 要么使用推送/轮询技术,要么需要在GWT中编写全新的组件。选择是你的
要完全理解为什么您需要了解Vaadin或/和Web应用程序的工作原理。让我们举个例子:你想以某种方式告诉浏览器在一段延迟(5秒)后关闭窗口。您可以通过两种不同的方式实现预期效果:
Vaadin中的setTimeout :当然,Vaadin中没有这样的方法,因为这个框架使用预编译的GWT组件。因此,您需要在Vaadin addons repo中找到一个组件或编写自己的组件。 GWT不是JavaScript - 这是真的,但您仍然可以将自己的JavaScript文件与任何GWT组件相关联。
从服务器向浏览器发送消息表示基本上是推送/轮询。别无他法。 Vaadin实际上支持两者,所以你唯一需要的就是了解它们。
还有一个黑客,但我不推荐这种方法。通常,您可以使用以下命令在运行时执行纯JavaScript代码:
JavaScript.getCurrent().execute("alert('Hello')");
但是,如果你想这样做,你将很难管理你的弹出窗口,因为Vaadin框架不会指望你关闭他负责的窗口。
答案 1 :(得分:0)
好吧,由于没有人给出正确的答案,你可以使用Timer
和TimerTask
执行类似的操作:
Window wd = new Window("Your autoclosing window");
// do stuff
Timer delayer = new Timer();
retrasador.schedule(new TimerTask(){
@Override
public void run() {
UI.getCurrent().access(new Runnable() {
@Override
public void run() {
wd.close();
}
});
}
}, 10000); // auto closes after 10 s
请注意,在您完成操作后,您可能应该使用它。