【问题标题】:ColumnHideCommand makes the table columns to disappear in NatTable, when all table elements are selectedColumnHideCommand makes the table columns to disappear in NatTable, when all table elements are selected
【发布时间】:2019-06-27 22:48:15
【问题描述】:

我有一个具有以下层的 NatTable 组件:

  • 视口层
  • 选择层
  • RowHideShowLayer
  • ColumnGroupExpandCollapseLayer
  • ColumnHideShowLayer
  • 数据层

当复选框选择发生变化时,我需要显示/隐藏特定列。为此,我使用 NatTable 组件提供的#doCommand() 方法:

if(selection) {
   nattable.doCommand(new ColumnShowCommand(nattable, COLUMN_INDEX));
} else {
   nattable.doCommand(new ColumnHideCommand(nattable, COLUMN_INDEX+1));
}

一切正常,除了选择表中的所有项目并执行 ColumnHideCommand 的情况。在这种特定情况下,整个表格内容都会消失 (Screenshot)。如果表格中没有选择,或者没有选择所有元素,那么一切正常。

如果您知道那里发生了什么或者您以前是否遇到过此类问题,请告诉我。我在 NatTables 方面的经验非常有限,所以如果您需要任何其他信息,请告诉我。谢谢!

【问题讨论】:

    标签: java swt nattable


    【解决方案1】:

    这是SelectionLayer 的一项功能,支持基于列选择的多列隐藏操作。 ColumnHideCommand 被消耗,而是基于完全选择的列创建和执行 MultiColumnHideCommand。负责人代码位于SelectionLayer#handleColumnHideCommand(ColumnHideCommand)。该方法受到保护,因此如果您不需要该功能,因为您仅支持以编程方式隐藏/显示列而不是通过用户执行的 UI,您可以覆盖该方法以简单地执行 super.doCommand(command); 而无需检查选择。

    【讨论】:

    • 非常感谢您的快速回复!我会按照你的建议实施。 :) 你能再解释一下为什么默认情况下它会这样吗?首先,这种行为背后的原因是什么?老实说,这对我来说听起来有点混乱,但这可能是因为我对 NatTable 没有正确的了解。当您有时间时,请回复有关此问题的更多详细信息。谢谢!
    • 设计就是这样,因为它是为处理用户交互而设计的,而不是用于以编程方式隐藏列。对于以编程方式隐藏列,您也可以尝试直接在ColumnHideShowLayer API 上操作,然后不执行命令修改。但是您需要自己处理位置转换(例如,在重新排序的列的情况下)。也许我们可以在命令中引入一个标志,以便将来不考虑选择,以将用户交互和编程处理分开。
    • 我们也考虑过使用ColumnHideShowLayer,但是这个不会调整表格列的大小。如果您尝试隐藏一列,则该表将不会使用整个剩余空间。无论如何,我会坚持你最初的提议,但将来有一面旗帜或其他东西会很好(正如你所建议的那样)。再次感谢您的帮助!
    • 我不明白那个评论。您最初说您使用的是 ColumnHideShowLayer。现在你说你不使用它。那没有意义。无论如何,即使是 ResizeColumnHideShowLayer 也有 API 以编程方式触发隐藏。
    • 是的,你是对的,很抱歉造成混乱。目前我在这里写了这个问题,我可能正在尝试使用 ColumnHideShowLayer,但我们也尝试了 ResizeColumnHideShowLayer(因为当列被隐藏时,这也是调整表格列的大小)。无论如何,您在 SelectionLayer 中提到的方法会针对使用的任何层触发,因此我将按照您的建议实现它。
    猜你喜欢
    • 2022-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 2021-01-12
    • 2022-12-26
    • 1970-01-01
    • 2022-04-20
    相关资源
    最近更新 更多