打印当前页面时如何隐藏项目?

时间:2019-02-27 13:05:44

标签: vaadin7

我通过Vaadin 7.3.6创建我的Web项目

当我要打印当前页面时,请使用以下内容:

    import com.vaadin.ui.Button;
    import com.vaadin.ui.Button.ClickListener;

    private ClickListener printListener;    
    printListener = new ClickListener() {

                @Override
                public void buttonClick(ClickEvent event) {
                    JavaScript.getCurrent().execute("print();");
                }
            };

因此,它正在打印当前页面。 页面内容来自文本和页面底部的两个按钮(打印确定)。很好。

但是我只想打印文本。没有这2个按钮。 我要在打印当前页面时隐藏按钮。 返回页面时,我想再次看到这两个按钮。

我该怎么做?

P.S。我试试这个:

final Button okButton = new Button(MessageService.getMessage("ok"));
final Button printButton = new Button(MessageService.getMessage("print"));
printButton.setStyleName("small-top-margin");
final JavaScript js = JavaScript.getCurrent();
    final UI ui = UI.getCurrent();
    printButton.addClickListener(event -> {
        logger.debug("click_print");
        Thread thread = new Thread(() -> {
            ui.access(() -> {
                logger.debug("hide_all_buttons");
                printButton.setVisible(false);
                okButton.setVisible(false);
                js.execute("print();");
            });
            try {
                logger.debug("wating_n_seconds");
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                logger.error(e.getMessage(), e);
            }
            ui.access(() -> {
                logger.debug("show_all_buttons");
                printButton.setVisible(true);
                okButton.setVisible(true);
            });
        });
        thread.start();
    }); // click listener
  1. 首先单击 printButton -没有任何反应

  2. 第二次点击 printButton -打印所有按钮。这是不正确的。

1 个答案:

答案 0 :(得分:0)

您可以使用button.setVisible(false)轻松隐藏按钮。真正的窍门是找回按钮。一种是在线程中执行此操作,并在将按钮切换回可见之前具有足够的延迟。这是一个示例(Java 8语法使其更紧凑),这与Vaadin 7和8均适用。

    final Button print = new Button("Print");
    final UI ui = this; // or UI.getCurrent() or getUI() depending where you are
    final JavaScript js = JavaScript.getCurrent();
    print.addClickListener(event -> {
        Thread t = new Thread(() -> {
            ui.access(() ->  {
                print.setVisible(false);
                js.execute("print();");
            });
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            ui.access(() -> print.setVisible(true));
        });
        t.start();
    });
    layout.addComponent(print);

替代方法是使用主题,即

Button print = new Button("Print");
print.addStyleName("no-print");

然后将以下内容放入@mixin mytheme

之前的mytheme.scss文件中
@media print {
   .no-print {
        display:none; 
   }
}