在vaadin中,如果我将width和height设置为undefined,那么在使用getHeight()/ getWidth()函数时我将得到-1.如果我使用sizeful(),我会得到100%.但是如何才能获得组件的精确宽度和高度?
小智 8
你可以通过调用javascript函数和get callback结果来实现.有关详情,请访问http://demo.vaadin.com/sampler/#foundation/javascript-callback
这样的事:
如果你有HorizontalLayout h
HorizontalLayout h = new HorizontalLayout()
//...
h.setId("myId");
JavaScript.getCurrent().addFunction("myGetWidth",
new JavaScriptFunction() {
@Override
public void call(final JSONArray arguments)
throws JSONException {
int width = arguments.getInt(0);
//now you can do something with this width
}
});
JavaScript.getCurrent().execute("myGetWidth(document.getElementById('" +h.getId() + "').clientWidth);");
Run Code Online (Sandbox Code Playgroud)
在Vaadin中,布局由浏览器中的客户端引擎实现,布局组件的具体大小通常取决于浏览器窗口的大小.Vaadin标准组件不会将组件大小发送回服务器.
由于您的所有代码都在服务器上执行,因此它也无法获取这些值.您需要编写一个特殊的包装器组件,每次更改时都会将其大小发送回服务器.
更新2013-03-21:我为Vaadin 7开发了SizeReporter插件,该插件将组件的大小发送回服务器,并在大小更改时通知您.