【问题标题】:JavaFX Preventing TableMenuButton from hiding all columnsJavaFX防止TableMenuButton隐藏所有列
【发布时间】:2014-11-26 06:54:04
【问题描述】:

我想使用表格菜单按钮 (table.setTableMenuButtonVisible(true);) 来隐藏和显示 TableView 中的指定列。当我取消选择所有列时,[+] 按钮隐藏,弹出“表中没有列”并且用户无法显示任何列。

我试图通过收听table.getVisibleLeafColumns() 并显示最后一个隐藏的列来防止隐藏所有列,但随后在菜单按钮的选择框中未选择此列。

【问题讨论】:

  • 对我来说看起来像一个错误:标题应该在 no-columns-at-all 和 no-visible-columns-due-to-user-hiding 之间产生差异。好奇:你想禁用隐藏最后一个可见的列还是让用户在按钮仍然可以访问的情况下隐藏它?
  • 两种情况对我来说都是合适的——只是不要剥夺用户的互动。现在我在TableColumn 上使用自定义ContextMenu 来执行此操作,该TableColumn 添加到列标题并禁用最后一列的取消选择。我认为当您取消选择所有列时它(菜单按钮)不应该消失。我知道我可以将超链接或按钮添加到(表格)占位符以显示所有列,但它看起来不太好,并且当表格中没有数据时也会弹出占位符。
  • hmm ... 很惊讶没有列属性 isHideable(或者我没有看到) - 你能展示你正在监听 visibleLeafColumns 的实验代码吗?

标签: java menu javafx tableview javafx-8


【解决方案1】:

绝对是一个错误(您可以考虑在 fx' jira 中报告它)。您在问题中提到的 hack-around 似乎可以使用从 Swing 借来的一个小技巧:延迟将可见性恢复到某个未来:

ListChangeListener<? super TableColumn> visibleColumnsListener = c -> {
    while (c.next()) {
        // very last remove
        if (c.wasRemoved() && !c.wasReplaced()) {
            TableColumn column = c.getRemoved().get(0);
            // delay reverting visibility
            Platform.runLater(() -> {
                column.setVisible(true);
            });
        }
    }
};

它可能比 Swing 中的类似物更脏,但是,runnable 的执行是在“未来某个未指定的时间”,并且没有说明它与正常(源自 ui)事件的关系。

报告为 RT-38907 并且刚刚修复(重复:RT-37616),应该在一两周内以 8u40 ea 冒泡。

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2014-12-05
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多