0

我有一个 CTabFolder,它有很多 CTabItems。每个 CTabItem 都有一个不同的 NatTable 作为其控件。创建每个 NatTable 时,它​​都有列标题但没有行。当我单击“填充数据”按钮时,它将用数据填充每个表。

如果我在单击“填充数据”按钮之前查看每个选项卡,我将按预期看到列标题。然后我可以按下按钮并查看所有表格中正确填充的所有数据。

如果在单击“填充数据”按钮之前未查看选项卡,我将看不到任何列标题或数据(对于我之前未查看的选项卡)。这是因为该选项卡中的 NatTable 的宽度为 0。

我不想在单击“填充数据”按钮之前单击每个选项卡。当不集中注意事项时,在内部进行的呼叫(我可能必须手动打电话)正确设置可naterable的宽度。

以下是我的代码示例:

public void whenNatTableIsCreated(){
    // Make sure the table fills the width of the parent
    glazedListsGridLayer.getBodyDataLayer()
        .setColumnPercentageSizing(true);
    nattable.addConfiguration(new DefaultNatTableStyleConfiguration() {
        {
            cellPainter = new LineBorderDecorator(new 
                TextPainter(false, true, 5, true));
        }
    });

}
public void afterTableHasData() {
    // Now that we have data, turn off the percentage sizing and 
    // allow the table width to exceed the parent width

    // This fails because getNatTable().getWidth() is 0
    getGlazedListsGridLayer().getBodyDataLayer().setDefaultColumnWidth(
            getNatTable().getWidth() / getGlazedListsGridLayer().
            getBodyDataLayer().getColumnCount());
    getGlazedListsGridLayer().getBodyDataLayer()
        .setColumnPercentageSizing(false);
}
4

1 回答 1

0

从示例中,我不了解百分比大小的用法。我想这就是问题所在。您最初启用它,但父复合没有大小,因此所有列的宽度设置为 0。通过再次启用它,列宽不会自动设置为某个宽度并保持为 0。

表格的宽度来自列。在 ViewportLayer 的情况下,宽度被最大化到可用的客户区域。但是由于所有列的宽度都为 0,因此整个 NatTable 的宽度为 0。并且在启用百分比大小调整后设置默认列宽可能也不会导致您期望的结果,因为每一列都有一个大小值存储,它会覆盖默认宽度。

简而言之,您的整个想法似乎不适用于 NatTable。

于 2016-11-16T15:43:47.003 回答