CTabItem内的NatTable宽度

时间:2016-11-16 14:48:27

标签: java nattable

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

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

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

我不想在点击“填充数据”按钮之前点击每个标签。内部调用(我可能手动调用)在选项卡未聚焦时正确设置NatTable宽度。

以下是我的代码示例:

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);
}

1 个答案:

答案 0 :(得分:0)

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

表格的宽度来自列。如果是ViewportLayer,则宽度最大为可用客户区。但由于所有列的宽度均为0,因此整个NatTable的宽度为0.并且在启用百分比大小后设置默认列宽可能也不会导致您期望的结果,因为每个列都有一个大小值stored,覆盖默认宽度。

简而言之,您的整个想法似乎与NatTable无关。