当我点击最大化或最小化按钮时,子窗口中的Calendar
组件的大小不会展开或收缩以适应子窗口的大小在子窗口中。
所以我必须点击随机按钮或组合框以使vaadin日历组件完全适合子窗口。
以下是显示我的问题的图片:
打开子窗口的代码:
Window abonWindow = new Window("Abonma");
abonWindow.setImmediate(true);
abonWindow.setHeight("450px");
abonWindow.setWidth("700px");
abonWindow.setModal(true);
abonWindow.setContent(new AddAbonma(abonWindow));
UI.getCurrent().addWindow(abonWindow);
我使用以下代码添加子窗口中的所有组件:
mainLayout = new AbsoluteLayout();
mainLayout.setImmediate(true);
mainLayout.setWidth("100%");
mainLayout.setHeight("100%");
setWidth("100.0%");
setHeight("100.0%");
initCalendar();
initLayoutContent();
initSettingPopupview();
panel_criteria = buildPanel_criteria();
mainLayout.addComponent(panel_criteria, "right:0.0px;top:0.0px;left:0.0px;");
mainLayout.addComponent(calendarComponent, "right:0.0px;top:70.5px;bottom:0px;left:0.0px;");
initCalendar
代码:
calendarComponent.setLocale(new Locale("sl","SL"));
calendarComponent.setImmediate(true);
calendarComponent.setHeight("100%");
calendarComponent.setWidth("100%");
这是我在SubWindow的构造函数中拥有的所有代码,我还在其中添加了addWindowModeChangeListener
:
buildMainLayout();
setCompositionRoot(mainLayout);
initGui(window);
window.addWindowModeChangeListener(new WindowModeChangeListener() {
@Override
public void windowModeChanged(WindowModeChangeEvent event) {
System.out.println("AddAbonma WindowMode");
if(calendarComponent!=null){
calendarComponent.markAsDirtyRecursive();
}
}
});
此方法适用于表,但不适用于vaadin日历组件。
那么当用户点击最大化或最小化按钮时,如何扩展或缩小vaadin日历组件以适应子窗口?
答案 0 :(得分:2)
您可以强制Vaadin使用JavaScript重新计算布局。这不应该是必需的,你描述的行为看起来像是Vaadin中的一个错误。
你可以尝试这样的事情。这使用150毫秒的任意超时,因为在Vaadin LayoutManager工作时无法请求布局重新计算,我们想在Vaadin处理窗口大小调整(并且无法计算布局)之后强制布局。
Window window = new Window();
Calendar calendar = new Calendar("Calendar");
calendar.setWidth("100%");
window.setWidth("700px");
window.setHeight("450px");
window.setContent(calendar);
window.addWindowModeChangeListener(event -> Page
.getCurrent()
.getJavaScript()
.execute("setTimeout(function() { vaadin.forceLayout(); }, 150);"));
Button button = new Button("Click me", event -> UI.getCurrent().addWindow(window));
setContent(button);