如何解决Vaadin 拆分布局侦听器 - 来自客户端的 div 宽度
在用户停止通过拖放调整 Vaadin 拆分布局的大小后,是否可以获得当前(在客户端)div 宽度?
类似的东西?
splitLayout.addSplitterDragendListener(new ComponentEventListener<GeneratedVaadinSplitLayout.SplitterDragendEvent<SplitLayout>>() {
@Override
public void onComponentEvent(GeneratedVaadinSplitLayout.SplitterDragendEvent<SplitLayout> splitLayoutSplitterDragendEvent) {
Notification.show(div.getWidth()); //it's return width which was defined on compilation
}
});
解决方法
目前在 SplitLayout Java API 中是 a documented missing feature。
在 Vaadin 中有底层 Element API,它有一个通用的客户端事件侦听器。可以利用它来监听dragend事件并获取主副面板的大小。
getElement().addEventListener("splitter-dragend",e -> {
this.primarySizePixel = e.getEventData().getNumber(PRIMARY_SIZE);
this.secondarySizePixel = e.getEventData().getNumber(SECONDARY_SIZE);
double totalSize = this.primarySizePixel + this.secondarySizePixel;
this.splitterPosition = Math.round((this.primarySizePixel / totalSize) * 100.0);
})
.addEventData(PRIMARY_SIZE)
.addEventData(SECONDARY_SIZE);
这里的 PRIMARY_SIZE
是 "element._primaryChild.offsetHeight"
或 "element._primaryChild.offsetWidth"
,具体取决于方向,分别是 SECONDARY_SIZE
"element._secondaryChild.offsetHeight"
或 "element._secondaryChild.offsetWidth"
。
在 Vaadin 的 issue tracker 中记录了使用此解决方案扩展 SplitLayout 的完整类。
顺便说一句。通过使用 Lambdas 而不是匿名类,将事件侦听器与 Vaadin Java API 结合使用会更加简洁。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。