获取Vaadin中组件的精确宽度和高度

Jef*_*ong 4 html css vaadin

在vaadin中,如果我将width和height设置为undefined,那么在使用getHeight()/ getWidth()函数时我将得到-1.如果我使用sizeful(),我会得到100%.但是如何才能获得组件的精确宽度和高度?

小智 8

你可以通过调用javascript函数和get callback结果来实现.有关详情,请访问http://demo.vaadin.com/sampler/#foundation/javascript-callback

这样的事:

如果你有Horizo​​ntalLayout 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)


Ing*_*gel 7

在Vaadin中,布局由浏览器中的客户端引擎实现,布局组件的具体大小通常取决于浏览器窗口的大小.Vaadin标准组件不会将组件大小发送回服务器.

由于您的所有代码都在服务器上执行,因此它也无法获取这些值.您需要编写一个特殊的包装器组件,每次更改时都会将其大小发送回服务器.


更新2013-03-21:为Vaadin 7开发了SizeReporter插件,插件将组件的大小发送回服务器,并在大小更改时通知您.