我想动态设置GWT Label
的文字。
例如,我使用下面的代码在GWT Label
中设置文字:
Label statusLabel = new Label();
for (int i = 0; i < numX; ++i) {
for (int j = 0; j < numY; ++j) {
statusLabel.setText("Processing " + "(" + (i + 1) + "/" + (j + 1) + " of " + numX + "/" + numY + ") ...");
}
}
我在RootPanel中添加了这个Label
,如下所示:RootPanel.get().add(statusLabel);
但问题是Label
文字是不合理的。
我错过了什么?或者如何将动态文本设置为GWT Lable
。
答案 0 :(得分:1)
你的循环只是快速。它不允许浏览器呈现更改的文本。如果您的处理仅在该循环内运行,则生成的JavaScript代码将作为单个块执行,并且不允许UI在其间刷新。
要允许UI刷新,您需要使用delayed logic。
例如,使用Scheduler.get().scheduleDeferred
。
延迟意味着JavaScript代码将控制权返回给浏览器,刷新文本,然后执行ScheduledCommand
。
简而言之:
将处理拆分为不同的部分,其中每个部分都会更改文本并使用ScheduledCommand
进行计划。
作为替代方案,您可以在类中保留一个计数器变量(就像在循环中一样),只需重新安排ScheduledCommands
,直到您的处理完成。
请记住,浏览器需要一些时间来刷新文本,并且在JavaScript代码返回之前它不会这样做。