You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin中Window.ResizeListener未被触发的问题咨询

Vaadin Window.ResizeListener 未触发的原因及解决办法

我来帮你排查这个窗口调整大小监听器没生效的问题,结合你的代码来看,核心问题出在监听器的注册方式上,下面详细拆解:

可能的原因

你代码里用了addListener(this)来注册监听器,但在你使用的Vaadin版本(从UNITS_PIXELS常量来看应该是Vaadin 6)中,通用的addListener方法无法自动识别Window.ResizeListener对应的事件类型,导致监听器没有正确绑定到窗口的resize事件上。

另外可以快速确认两个前置条件:

  • 你已经设置了setResizable(true)(代码里已经配置,这部分没问题)
  • 窗口已经被正确添加到UI并显示(如果窗口没被打开,自然不会触发resize事件)

解决办法

把监听器的注册代码替换为针对ResizeEvent的明确绑定方式:

针对Vaadin 6版本(匹配你的代码环境)

将构造方法里的addListener(this)替换为:

addListener(ResizeEvent.class, this, "windowResized");

这行代码明确指定了要监听的事件类型是ResizeEvent,并将其绑定到你的windowResized方法上。

修改后的完整构造方法示例:

public ExchangeWindow() {
    center();
    setWidth(600, Unit.PIXELS);
    setHeight(430, Unit.PIXELS);
    setModal(true);
    setResizable(true);
    setImmediate(true);
    // 替换原addListener(this)为下面这行
    addListener(ResizeEvent.class, this, "windowResized");
}

如果后续升级到Vaadin 7及以上版本

Vaadin 7+废弃了旧的addListener方法,改用类型安全的监听器注册方式:

addResizeListener(this);

同时注意,Vaadin 7+里的单位常量是Unit.PIXELS(不再是你代码里的UNITS_PIXELS,升级时需要同步修改)。

额外验证小技巧

可以先在windowResized方法里加一行日志输出,快速验证监听器是否触发:

@Override
public void windowResized(ResizeEvent resizeEvent) {
    System.out.println("窗口调整大小事件已触发!");
    // 你的原有逻辑
    if(left.isVisible()) {
        exchangeTable.setWidth(600, UNITS_PIXELS);
    }
}

内容的提问来源于stack exchange,提问作者masiboo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:02:19