Как увеличить Время уведомления/предупреждения Vaadin? Я использую тему Ваадина Вало. Ничто из книги Ваадина Notifications страница помогает.Как увеличить время уведомления/предупреждения Vaadin?
ответ
По умолчанию Задержки
Прежде всего отметим, что the five types из Notification
имеют различные задержки по умолчанию.
Notification.Type.HUMANIZED_MESSAGE
Показано, пока пользователь перемещает указатель мыши.Notification.Type.TRAY_NOTIFICATION
Отображается до 3 секунд после того, как пользователь перемещает указатель мыши.Notification.Type.WARNING_MESSAGE
Отображается до 1,5 секунд после того, как пользователь перемещает указатель мыши.Notification.Type.ERROR_MESSAGE
Отображается, пока пользователь не нажмет на сообщение. (Задержка установлена на -1 миллисекунды)Notification.Type.ASSISTIVE_NOTIFICATION
Не делает ничего для меня в Safari на Mac OS X Mountain Lion.
См. Ниже исходный код примера приложения, демонстрирующего каждый тип.
Управление Задержки
Notification
класса имеет аксессор для задержки: getDelayMsec
и setDelayMsec
.
Например, чтобы установить задержку на семь секунд, мы должны преобразовать ее в миллисекунды.
notification.setDelayMsec(7 * 1_000);
Или еще лучше, заменить «магическое» число с использованием TimeUnit
преобразователя. Преобразователь производит только long
значений, поэтому мы должны наложить int
, чтобы удовлетворить сеттинг Vaadin.
notification.setDelayMsec((int) TimeUnit.SECONDS.toMillis(7));
Остерегайтесь одного большой изменения в поведении от значения по умолчанию. Если установить положительный номер задержки на ERROR_MESSAGE
, пользователю не нужно щелкнуть, чтобы уволить; сообщение об ошибке исчезает после истечения задержки после перемещения указателя мыши.
Смотрите этот код в действии в следующем примере приложения. Раскомментируйте строку кода, вызывающую setter.
Пример приложения
Вот некоторые Vaadin 7.5.3 код. Этот класс является полным приложением Vaadin. Просто создайте новый проект Vaadin и замените его на этот код.
При отключении/включении устройства настройки вам может потребоваться перезапустить приложение Vaadin. (Или купить license for JRebel, чтобы избежать перезагрузки.)
package com.example.vaadinnotifs;
import javax.servlet.annotation.WebServlet;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.annotations.Widgetset;
import com.vaadin.server.Page;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Notification;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import java.util.concurrent.TimeUnit;
/**
* By Basil Bourque.
*
* Source code provided under MIT License.
* http://opensource.org/licenses/MIT
*/
@Theme ("mytheme")
@Widgetset ("com.example.vaadinnotifs.MyAppWidgetset")
@SuppressWarnings ("serial")
public class MyUI extends UI
{
@Override
protected void init (VaadinRequest vaadinRequest) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
layout.setSpacing(true);
setContent(layout);
layout.addComponent(this.makeButton(Notification.Type.HUMANIZED_MESSAGE));
layout.addComponent(this.makeButton(Notification.Type.TRAY_NOTIFICATION));
layout.addComponent(this.makeButton(Notification.Type.WARNING_MESSAGE));
layout.addComponent(this.makeButton(Notification.Type.ERROR_MESSAGE));
layout.addComponent(this.makeButton(Notification.Type.ASSISTIVE_NOTIFICATION));
}
@WebServlet (urlPatterns = "/*" , name = "MyUIServlet" , asyncSupported = true)
@VaadinServletConfiguration (ui = MyUI.class , productionMode = false)
public static class MyUIServlet extends VaadinServlet
{
}
private Button makeButton (Notification.Type typeArg) {
// Taking advantage of Java’s nifty Enum capability to generically produce each Button instance.
Button b = new Button(typeArg.name());
b.setData(typeArg); // "setData" and "getData" are accessors for a little hiding place for any object you wish to carry with a Vaadin widget.
b.addClickListener(new Button.ClickListener()
{
@Override
public void buttonClick (ClickEvent event) {
Notification.Type t = (Notification.Type) event.getButton().getData(); // Cast from Object type used by the widget’s hiding place to the `Notification.Type` type we know we used.
Notification notification = new Notification("This is a Notification message." , t);
//notification.setDelayMsec((int) TimeUnit.SECONDS.toMillis(7));
Integer delayMillis = notification.getDelayMsec();
String description = "Notification.Type: " + t.name() + " has delay of " + delayMillis + " ms.";
notification.setDescription(description);
notification.show(Page.getCurrent());
}
});
return b;
}
}
Спасибо за @BasilBourque решение. Я использую уведомление во многих местах. Изменить каждое свойство уведомления невозможно. У нас есть какой-либо CSS для применения в классе уведомлений или Можем ли мы перегрузить любой метод Vaadin, чтобы увеличить задержку? –
Я предлагаю вам создать класс, который расширяет «Уведомление» и добавляет задержку в свой собственный конструктор. Затем выполните глобальный поиск и замену. –
Другая мысль: если у вас так много применений уведомления, что их изменение вас раздражает, то вы можете раздражать своих пользователей с таким количеством уведомлений. Возможно, вам захочется рассмотреть альтернативные устройства пользовательского интерфейса для предоставления отзывов пользователям. –