【问题标题】:Expanding or shrinking size of vaadin calendar component in subwindow在子窗口中扩大或缩小 vaadin 日历组件的大小
【发布时间】:2016-05-05 13:36:19
【问题描述】:

当我单击子窗口中的最大化或最小化按钮时,子窗口中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);

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

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

【问题讨论】:

    标签: java calendar resize window vaadin


    【解决方案1】:

    您可以强制 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);
    

    【讨论】:

      猜你喜欢
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      相关资源
      最近更新 更多