Получить точно ширину и высоту компонента в Vaadin - PullRequest
4 голосов
/ 17 октября 2011

В vaadin, если я установлю ширину и высоту неопределенными, я получу -1 при использовании функции getHeight () / getWidth ().если я использую sizeful (), я получу 100%.Но как я могу точно определить ширину и высоту компонента?

Ответы [ 3 ]

8 голосов
/ 10 сентября 2013

Вы можете сделать это, вызвав функцию javascript и получив результат обратного вызова. Подробнее в 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);");
7 голосов
/ 17 октября 2011

В Vaadin макет реализован на стороне клиента в браузере, и конкретные размеры компонентов макета обычно зависят от размера окна браузера. Размеры компонентов не отправляются обратно на сервер стандартными компонентами Vaadin.

Поскольку весь ваш код выполняется на сервере, он также не может получить эти значения. Вам потребуется запрограммировать специальный компонент-обертку, который каждый раз отправляет свой размер серверу при каждом изменении.


Обновление 2013-03-21: Я разработал дополнение SizeReporter для Vaadin 7 , которое отправляет обратно размер компонента на сервер и уведомляет вас о размере меняется.

3 голосов
/ 26 сентября 2012

Может быть, уже слишком поздно, но я публикую это здесь, просто чтобы знать:

Теперь вы можете использовать это дополнение из каталога vaadin, чтобы выполнить это (https://vaadin.com/directory#addon/css-tools).

ЭтоНадстройка просто позволяет вам, учитывая определенный компонент, собирать информацию о CSS о нем.Я приведу здесь пример кода (то же самое, что вы найдете на странице надстройки)

    RenderInfo.get(component, new Callback() {
            public void infoReceived(RenderInfo info) {
                   // Use the info
                   // All the properties are returned as Strings, e.g. "123px"
                   String width = info.getProperty(CssProperty.width);
            }
    },CssProperty.height, CssProperty.width);

Таким образом, вы получите только высоту и ширину выбранного компонента!

...