2015-11-18 4 views
0

Я хочу установить текст GWT Label динамически.Динамический набор текста в GWT Ярлык

Например я использую ниже код, чтобы установить текст в 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 + ") ..."); 
     } 
    } 

И я добавить Label в RootPanel один раз, как это: RootPanel.get().add(statusLabel);

Но проблема в том, что Label текст unchnage.

Что я пропустил? Или Как установить динамический текст в GWT Lable.

+1

Запускаете ли вы цикл, прежде чем метка будет прикреплена к родительскому объекту? – Baz

+0

№ Сначала я добавил метку в RootPanel, и после этого я использую вышеперечисленное для цикла. –

+1

Является ли окончательный текст результатом после окончания цикла? –

ответ

1

Ваша петля - это просто, чтобы быстро. Это не позволяет браузеру отображать измененный текст. Если ваша обработка выполняется только внутри этого цикла, сгенерированный код JavaScript будет выполняться как один блок и не позволит обновлять интерфейс между ними.

Чтобы обновить пользовательский интерфейс, вам необходимо использовать delayed logic. Например, Scheduler.get().scheduleDeferred. Отложено означает, что код JavaScript возвращает управление браузеру, который обновляет текст, а затем выполняет ScheduledCommand.

Чтобы сделать его коротким: Разделить вашу обработку в различных частях, где каждый из них изменяет текст и получает запланированными с помощью ScheduledCommand. В качестве альтернативы вы можете сохранить переменную счетчика в своем классе (например, в цикле) и просто перераспределить ScheduledCommands, пока ваша обработка не будет завершена.

Просто имейте в виду, что браузеру требуется некоторое время, чтобы обновить текст и что он не сделает этого, пока не вернется код JavaScript.