【问题标题】:Get the exactly width and height of a component in Vaadin在 Vaadin 中获取组件的确切宽度和高度
【发布时间】:2011-12-08 21:56:58
【问题描述】:

在 vaadin 中,如果我将宽度和高度设置为未定义,则在使用 getHeight()/getWidth() 函数时会得到 -1。 如果我使用 sizeful(),我会得到 100%。但是我怎样才能得到一个组件的确切宽度和高度呢?

【问题讨论】:

    标签: html css vaadin


    【解决方案1】:

    您可以通过调用 javascript 函数来获取回调结果。 阅读更多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);");
    

    【讨论】:

    • 不错的技巧!
    • 谢谢!这正是我们所需要的
    • 如何将宽度传递给服务器端??
    • 这是为我做的,谢谢。上面的 SizeReporter 不起作用。
    • 不幸的是,无法在 Vaadin 14 中工作。JavaScript 没有 .getCurrent() 方法。
    【解决方案2】:

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

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


    2013-03-21 更新:我开发了SizeReporter add-on for Vaadin 7,它将组件的大小发送回服务器,并在大小发生变化时通知您。

    【讨论】:

    【解决方案3】:

    也许为时已晚,但我在这里发布这个只是为了知道:

    现在,您可以使用 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);
    

    这样你就可以得到所选组件的高度和宽度!

    【讨论】:

    • 抱歉,我在使用插件时遇到了问题。我收到以下异常 HTTP Status 500 - com.vaadin.server.ServiceException: java.lang.NoSuchMethodError: com.vaadin.ui.Component.getApplication()Lcom/vaadin/Application; 抱怨 RenderInfo.get at org.vaadin.csstools.RenderInfo.get(RenderInfo.java:45)。你能告诉我如何解决它吗?
    • 您使用的是 Vaadin 6 还是 7?
    • 我用的是Vaadin 7,刚才从Vaadin目录看到这个扩展对Vaadin 7是不可用的,是不是?
    • 是的...此扩展仅适用于 vaadin 6!
    • 即使对 Vaadin 7 也很有用。
    猜你喜欢
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 2012-10-10
    • 2021-06-30
    相关资源
    最近更新 更多