【问题标题】:How to layout widgets using DockLayoutPanel and UiBinder in GWT 2.0?如何在 GWT 2.0 中使用 DockLayoutPanel 和 UiBinder 布局小部件?
【发布时间】:2010-12-28 15:08:01
【问题描述】:

我正在尝试使用 UiBinder 在 GWT 2.0 下获得一个简单的布局。我试图获得的布局是模仿 Java 的 BorderLayout 的布局,您可以在其中指定北、南、东、西和中心方向的不同面板;为此,我正在使用 DockLayoutPanel。我想获得一个固定宽度的页眉和页脚。剩余的视口空间将被分配给 DockLayoutPanel 中心槽的小部件占用。

我得到的当前 .ui.xml 文件是:

<g:DockLayoutPanel unit='EM'>
    <g:north size='2'>
        <g:HTML>HEADER</g:HTML> 
    </g:north>

    <g:south size='2'>
        <g:HTML>FOOTER</g:HTML> 
    </g:south>

    <g:center>
        <g:HTML>
            <div id='loginform'>Hello!</div>
        </g:HTML>
    </g:center>
</g:DockLayoutPanel>

浏览器只在左上角呈现 HEADER。我怎样才能实现我正在寻找的布局?在使用 GWT 布局面板之前,您似乎需要了解更多 CSS,但这违背了使用它创建 UI 的目的。

【问题讨论】:

    标签: java gwt layout uibinder


    【解决方案1】:

    这对我有用,没有 RaphaelO 建议的任何技巧。

    DockLayoutPanel 上的 Javadoc 示例使用 192 作为 West 的宽度。这是错误的——作者可能认为他使用的是 PX,但他使用的是 EM。所以如果你缩小,你会看到中心在最右边。

    您检查过您使用的标准模式吗?这是 DockLayoutPanel 所必需的。

    另外,忘记提及在入口点类中添加 DockLayout 时应该使用 RootLayoutPanel - 不要使用 RootPanel。

    【讨论】:

    • 我不知道 RootLayoutPanel 的存在。一旦我改为使用它而不是 RootPanel,一切都按预期工作。
    • 您是否在控制台中遇到任何错误?您可以尝试使用 javadocs 示例(我对 West 宽度进行更正)看看是否有效?
    • 它正在工作。没有控制台错误。问题是我使用的是 RootPanel 而不是 RootLayoutPanel。
    • 谢谢..我应该更好地阅读文档。他们在那里列出:code.google.com/webtoolkit/doc/latest/…
    • 我遇到了同样的问题。是的,RootLayoutPanel 是关键。
    【解决方案2】:

    新引入的布局面板的使用确实相当混乱。有一种方法可以使布局占据整个客户区。除了 ui.xml 文件之外,它还需要一点 Java 代码。

    在您的 EntryPoint 类中,将带有注释的 UiBinder 定义添加到声明布局的 ui.xml 文件中:

    @UiTemplate("LayoutDeclarationFile.ui.xml")
    interface DockLayoutUiBinder extends
            UiBinder<DockLayoutPanel, TheEntryPointChildClass> {
    }
    
    private static DockLayoutUiBinder uiBinder = GWT
            .create(DockLayoutUiBinder.class);
    

    在onModuleLoad函数中,实例化UiBinder,取回它的root,直接添加到DOM中:

    public void onModuleLoad() {
        DockLayoutPanel layout = uiBinder.createAndBindUi(this);
        // Make sure we use the whole client area
        Window.setMargin("0px");
    
        // Add the panel to the DOM
        RootLayoutPanel.get().add(layout);
     }
    

    【讨论】:

    • 这对我的情况有所帮助,尽管我必须对我的特定情况进行一些调整,因为我为我的 UI 组件使用了一个单独的类。 “interface DockLayoutUiBinder extends {}”
    【解决方案3】:

    我尝试了您的代码块以及 DockLayoutPanel 的 javadoc 页面上的示例块,我得到了类似的结果。似乎只显示了 DockLayoutPanel 的 North 部分中的数据。但是,当我搜索页面(在 Mac 上使用 firefox 和 safari)时,会找到其他元素,但它们没有显示在任何地方。似乎这个面板和 UiBinder 可能存在错误。

    【讨论】:

    • 感谢您试用。如果您检查发送给客户端的代码,您可以看到其他元素。我认为这是不正确的 CSS 布局,但我不知道足够的 CSS 来调试它。
    • 我同意这可能是一个 CSS 错误,但看到我们都没有真正对 CSS 做任何事情(我只是使用默认值),这似乎是一个 GWT 错误。您可能想在 GWT 问题网站 (code.google.com/p/google-web-toolkit/issues/list) 上打开一个错误
    • 查看@RaphaelO 的答案:执行 Window.setMargin("0");在将 DockLayoutPanel 实例添加到 RootLayoutPanel 之前似乎可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 2016-05-14
    相关资源
    最近更新 更多