在子窗口中扩大或缩小 vaadin 日历组件的大小

Expanding or shrinking size of vaadin calendar component in subwindow

子窗口中 Calendar 组件的大小不 展开 收缩 以适应子窗口的大小,当我单击子窗口中的最大化或最小化按钮。

所以我必须单击随机按钮或组合框才能使 vaadin 日历组件完全适合子窗口。

以下图片显示了我的问题:

  1. 第一次打开时的子窗口(OK)。
  2. 当我点击最大化按钮时(不正常)。

打开子窗口的代码:

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);

我使用以下代码在 subwindow 中添加所有组件:

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 日历组件以适应 子窗口

您可以使用 JavaScript 强制 Vaadin 重新计算布局。这不是必需的,您描述的行为看起来像是 Vaadin 中的错误。

你可以尝试这样的事情。这使用 150 毫秒的任意超时,因为在 Vaadin LayoutManager 工作时无法请求布局重新计算,我们希望在 Vaadin 处理 window 调整大小(并且无法计算布局)后强制布局。

    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);