Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2016, 06:54   #1
Karik_
Пользователь
 
Аватар для Karik_
 
Регистрация: 12.02.2016
Сообщений: 16
По умолчанию Обновление компонента Label

Добрый всем день! Проблема такая: не обновляется значение label. В общем есть таймер, который меняет значение label:
Код:
task2 = new AbstractSchedulerTask() {
					
					@Override
					protected void run() throws Exception {
						timerLabel.setValue("Осталось: " + t + " секунд");
						t = t - 1;
					}
					
					@Override
					public int getId() {
						return 102;
					}
				};
				
				try {
					SchedulerManager.getInstance().schedulePeriodically(task2, 0, 1, TimeUnit.SECONDS);
				} catch (Exception e2) {
					Log.LOGGER.error("Unable to create Task2: ", e2);
				}
Счетчик работает. Но значение label автоматически не обновляется. Добавил метод:
Код:
timerLabel.addValueChangeListener(new ValueChangeListener() {
					
					@Override
					public void valueChange(ValueChangeEvent event) {
			                for (k = 1; k < 61; k++) {
			                	if (t == k) {
			                		timerLabel.setValue("Осталось: " + t + " секунд");
			                		timerLabel.setCaption("Осталось: " + t + " секунд");
			                	}
			                }
					}
				});
Все равно не работает. В чем проблема? Что еще прописать надо чтобы автоматически обновлялся label.
Karik_ вне форума Ответить с цитированием
Старый 03.05.2016, 09:19   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Как узнали, что счетчик работает если label не обновляется?

Вообще секунды считать так неправильно. Таймеры обычно не гарантируют, что оно будет срабатывать ровно раз в секунду. Лучше просто создать таймер с любым небольшим интервалом, а время в нем считать исходя из текущего времени (с помощью DateTime и т.п.)

И во втором коде бред какой-то написан вне зависимости от его работоспособности. В чем смысл цикла? Почему сразу t не вывести?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.05.2016, 10:46   #3
Karik_
Пользователь
 
Аватар для Karik_
 
Регистрация: 12.02.2016
Сообщений: 16
По умолчанию

Программа - это тестирование студентов, таймер ограничивает время тестирования. Сам таймер работает и уменьшает значение t каждую секунду, но значение timerLabel не обновляется. Оно обновляется только при выборе какого-нибудь варианта ответа в компоненте OptionGroup, тогда значение timerLabel обновляется. Главная задача, чтобы автоматически обновлялся timerLabel, а не при выборе варианта ответа. Остальное не имеет значение.
Karik_ вне форума Ответить с цитированием
Старый 03.05.2016, 11:04   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вместо уменьшения t лучше при запуске вычислить время завершения и в таймере вычислять разницу между текущим временем и этим временем.

А проблема скорее всего не в таймере, а в особенностях используемой GUI библиотеки (Vaadin или что там у вас).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.05.2016, 11:23   #5
Karik_
Пользователь
 
Аватар для Karik_
 
Регистрация: 12.02.2016
Сообщений: 16
По умолчанию

Vaadin. Я понимаю, что дело не в таймере, он нормально отрабатывает. Ну даже если я буду вычислять время в таймере, оно тоже не будет обновляться. Время же я тоже через LAbel буду выводить.
Karik_ вне форума Ответить с цитированием
Старый 03.05.2016, 11:45   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

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

А про Vaadin я не в курсе что там и как.
https://www.google.com/search?q=vaadin+timer+label
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление label Taner Помощь студентам 4 09.06.2014 16:10
Удаление определенного количества символов из компонента label Sandysman Мультимедиа в Delphi 4 22.03.2012 14:46
Ввести 3 числа ( в 3 компонента Edit ) и расположить их по возрастанию в компоненте Label Сароникус Помощь студентам 0 01.10.2011 22:31
ежесекундное обновление label Dop Общие вопросы Delphi 2 08.06.2011 16:01
Использование компонента Label kholoshchak Общие вопросы Delphi 3 11.04.2011 15:26