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

标签 java calendar resize window vaadin

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

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

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

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

打开子窗口的代码:

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

最佳答案

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

关于java - 在子窗口中扩大或缩小 vaadin 日历组件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37052108/

相关文章:

php - MySQL 查询日历的事件

javascript - 将 div 定位到右侧,宽度未定义

css - HTML5/CSS|出现滚动条时如何禁用响应?

java - 联合 : how to make conditional tests?

java - Subversion 中提取接口(interface)重构的最佳体现

java - 错误 : Caused by: java. io.IOException : CreateProcess error=2, 系统找不到指定的文件。适用于所有可执行文件

wpf - 如何从可调整大小的窗口中删除最小化和最大化按钮?

java - 我可以直接将目录从一个地方复制到另一个地方吗?

c++ - 赋值运算符 C++

安卓日历