我通过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
首先单击 printButton -没有任何反应
第二次点击 printButton -打印所有按钮。这是不正确的。
答案 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
@media print {
.no-print {
display:none;
}
}