使用GWT在DisclosurePanel内调整ResizeLayoutPanel

我在DisclosurePanel中使用ResizeLayoutPanel时遇到问题。

我有一个Datagrid到ResizePanel内的ResizeLayoutPanel和ResizeLayaoutPanel。 问题是加载数据时,如果DisclosurePanel关闭,当用户打开disclosurePanel时,它会发现表空。 如果用户在DisclosurePanel打开时执行此操作,则可以正常工作。

知道如何解决这个问题?

这是代码:

ResizeLayoutPanel resizeLayoutPanel = new ResizeLayoutPanel(); resizeLayoutPanel.setWidth("100%"); resizeLayoutPanel.setStyleName("gwt-resizeLayoutPanel-Example"); /****CREATE COLUMNS [BEGIN] ***************************************************************************/ // Create column. TextColumn column = new TextColumn() { @Override public String getValue(Object object) { return "Test"; } }; /******CREATE COLUMNS [END] ***************************************************************************/ cellTable = new DataGrid(); cellTable.addColumn(column, "Example"); cellTable.setKeyboardSelectionPolicy(HasKeyboardSelectionPolicy.KeyboardSelectionPolicy.BOUND_TO_SELECTION); cellTable.setWidth("100%"); cellTable.setEmptyTableWidget(new Label("Example table")); resizeLayoutPanel.add(cellTable); //Link dataProvider with CellTable dataProvider.addDataDisplay(cellTable); this.container = ModuleContainer.getAdvancedDisclosurePanel("Samples"); this.container.setWidth("100%"); this.container.setContent(resizeLayoutPanel); return this.container; 

ResizeLayoutPanel提供resize(实现ProvideResize),但不需要resize(不实现RequiresResize)。

由于处于普通状态的ResizeLayoutPanel不会监听resize,因此您必须有意resize,或编写代码来resize。 也许,将宽度和高度设置为100%。

然后,为什么要将表放在ResizeLayoutPanel中?

ResizeLayoutPanel为RequiresResize的小部件提供resize。 您需要扩展celltable以实现RequiresResize,以便ResizeLayoutPanel能够调整它的大小。

编程GWT时,任何人都需要学习的第一个概念是理解为什么/如何从根resize面板创建一个不间断的RequiresResize-RequiresResize的链/树。 如果你的resize链/树的根不是RootLayoutPanel,那么你必须故意调整该根的大小。

在这种情况下,您已使ResizeLayoutPanel成为resize不存在的resize链的根。 使用其他面板,其中包含RequiresResize,以便父级可以调整其大小 – 以及确保父级可由用户或其他可resize的父级手动resize。

我可以请你自问一下,使用ResizeLayoutPanel而不提供resize的方法,也不使用它作为resize链的根目的原因是什么?