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

时间:2016-05-05 13:36:20

标签: java calendar resize window vaadin

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

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

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

  1. 第一次打开时的子窗口(确定)。 Subwindow in normal state (first time opened)
  2. 当我点击最大化按钮(不行)时。 Subwindow in fulscreen state
  3. 打开子窗口的代码:

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

1 个答案:

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