如何增加 Vaadin通知/警告时间? 我正在使用Vaadin Valo主题。 Vaadin的书Notifications页没有任何帮助。

最佳答案

默认延迟

首先请注意,默认情况下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在Mac OS X Mountain Lion的Safari中对我没有任何帮助。

  • 请参阅下面的示例应用程序的源代码,以演示每种类型。

    控制延迟

    Notification 类具有用于延迟的访问器: getDelayMsec setDelayMsec

    例如,要首先将延迟设置为7秒,我们必须将其转换为毫秒。
    notification.setDelayMsec( 7 * 1_000 );
    

    或者更好的是,使用 TimeUnit 转换器替换“魔术”数字。转换器仅生成long值,因此我们必须将其转换为int才能满足Vaadin设置程序。
    notification.setDelayMsec( ( int ) TimeUnit.SECONDS.toMillis( 7 ) );
    

    注意默认行为的重大变化。如果在ERROR_MESSAGE上设置正延迟号,则用户无需单击即可关闭;鼠标指针移动后,延迟到期后,错误消息消失

    请在以下示例应用程序中查看此代码的实际操作。取消注释调用设置程序的代码行。

    示例应用

    这是一些Vaadin 7.5.3代码。此类是完整的Vaadin应用程序。只需创建一个新的Vaadin项目并替换为此代码即可。

    禁用/启用 setter 时,您可能需要重新启动Vaadin应用程序。 (或购买license for JRebel以避免重新启动。)

    vaadin - 如何增加Vaadin通知/警告时间?-LMLPHP
    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;
        }
    
    }
    

    关于vaadin - 如何增加Vaadin通知/警告时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32000401/

    10-13 07:45