2015-08-14 1 views

ответ

10

По умолчанию Задержки

Прежде всего отметим, что 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, чтобы избежать перезагрузки.)

screenshot of example app with five buttons

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; 
    } 

} 
+0

Спасибо за @BasilBourque решение. Я использую уведомление во многих местах. Изменить каждое свойство уведомления невозможно. У нас есть какой-либо CSS для применения в классе уведомлений или Можем ли мы перегрузить любой метод Vaadin, чтобы увеличить задержку? –

+1

Я предлагаю вам создать класс, который расширяет «Уведомление» и добавляет задержку в свой собственный конструктор. Затем выполните глобальный поиск и замену. –

+0

Другая мысль: если у вас так много применений уведомления, что их изменение вас раздражает, то вы можете раздражать своих пользователей с таким количеством уведомлений. Возможно, вам захочется рассмотреть альтернативные устройства пользовательского интерфейса для предоставления отзывов пользователям. –