GWT DataGrid不显示,CellTable

时间:2015-10-01 17:47:44

标签: java gwt datagrid

概述

我有一个由SplitLayoutPanel组成的应用程序,它有一个StackLayoutPanel,左边有两个菜单选项,右边是DeckLayoutPanel。 DeckLayoutPanel有两个子面板,一个是包含Label的SimpleLayoutPanel,另一个是包含Label的DockLayoutPanel和另一个SimpleLayoutPanel。最后一个SimpleLayoutPanel包含一个DataGrid。

SplitLayoutPanel (TestUI) | + StackLayoutPanel | | | + CellList (Profile) | | | + CellList (Admin) | + DeckLayoutPanel | + SimpleLayoutPanel | | | + Label | + DockLayoutPanel (BudgetPanel) | + Label | + SimpleLayoutPanel (LedgerPanel) | + DataGrid

所有子面板的高度和宽度均由其包含的面板设置为100%。

预期行为

预期的行为是点击"预算" StackLayoutPanel中的菜单项将显示BudgetPanel,包括LedgerPanel的DataGrid。

观察到的行为

"预算"单击菜单项,显示DockLayoutPanel,其标题为Label,显示DataGrid列标题,但不显示DataGrid行。

当一个Label被添加到DockLayoutPanel的南区时,应用程序会编译但不会显示任何内容,甚至不会显示顶级StackLayoutPanel。

当用CellTable替换DataGrid时,会显示数据(尽管每行的高度远远超过保存数据所需的数据)。

问题

需要做些什么才能让DataGrid按预期显示?

如何将行设置为具有较小的高度?

源代码

GitHub上提供了演示此问题的完整源代码。

2 个答案:

答案 0 :(得分:1)

我的代码看起来非常快,从我看到的,你为数据网格设置了100%的高度。不幸的是,在GWT中,您必须为数据网格设置固定值。

datagrid.setHeight("300px");

您可以通过动态更改数据网格的高度来解决此问题。

Window.addResizeHandler(new ResizeHandler() {
      @Override
      public void onResize(ResizeEvent event) {
        datagrid.setHeight(Window.getClientHeight() - menuSize);
      }
    });

答案 1 :(得分:0)

我在GWT邮件列表上得到了Thomas Broyer的答案。诀窍是在BudgetPanel实例的包含DeckLayoutPanel中显示时调用forceLayout()。

感谢所有建议。