我有一个由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上提供了演示此问题的完整源代码。
答案 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()。
感谢所有建议。