gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:39:09 25 4
gpt4 key购买 nike

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

所以我必须单击随机按钮或组合框才能让 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com