GWT标签中的动态设置文本

时间:2015-11-18 12:03:02

标签: gwt label

我想动态设置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

1 个答案:

答案 0 :(得分:1)

你的循环只是快速。它不允许浏览器呈现更改的文本。如果您的处理仅在该循环内运行,则生成的JavaScript代码将作为单个块执行,并且不允许UI在其间刷新。

要允许UI刷新,您需要使用delayed logic。 例如,使用Scheduler.get().scheduleDeferred。 延迟意味着JavaScript代码将控制权返回给浏览器,刷新文本,然后执行ScheduledCommand

简而言之: 将处理拆分为不同的部分,其中每个部分都会更改文本并使用ScheduledCommand进行计划。 作为替代方案,您可以在类中保留一个计数器变量(就像在循环中一样),只需重新安排ScheduledCommands,直到您的处理完成。

请记住,浏览器需要一些时间来刷新文本,并且在JavaScript代码返回之前它不会这样做。