Как скрыть элементы при печати текущей страницы? - PullRequest
0 голосов
/ 27 февраля 2019

Я создаю свой веб-проект от Vaadin 7.3.6

Когда я хочу напечатать текущую страницу, я использую это:

    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();");
                }
            };

В результате это печатает текущую страницу.Содержимое страницы из текста и две кнопки ( Печать , OK ) внизу страницы.Хорошо.

Но я хочу печатать только текст.Без этого 2 кнопки.Я хочу скрыть кнопки ТОЛЬКО при печати текущей страницы.При возвращении на страницу я хочу снова увидеть эти две кнопки.

Как я могу это сделать?

PS Я пытаюсь это:

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 голосов
/ 27 февраля 2019

Вы можете легко скрыть кнопку с помощью 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");

Иследующее в ваш файл mytheme.scss, перед @mixin mytheme

@media print {
   .no-print {
        display:none; 
   }
}
...