2014-10-01 114 views
2

我想使用Table Menu Button(table.setTableMenuButtonVisible(true);)隐藏和显示TableView中的指定列。当我取消选择所有列时,[+]按钮隐藏,“表中没有列”弹出,用户无法显示任何列。JavaFX防止TableMenuButton隐藏所有列

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

+0

对我来说看起来像一个错误:头文件应该在无列所有和不可见列应有的用户隐藏之间做出区别。好奇:你想禁用隐藏最后一个可见的列,或让用户隐藏它仍然可以访问的按钮? – kleopatra 2014-10-02 09:11:49

+0

这两种情况对我来说都是合适的 - 只是不要带走用户的交互。现在我使用'TableColumn'上的自定义'ContextMenu'来完成它,它被添加到列标题并禁用取消选择最后一列。我认为它(菜单按钮)不应该消失,当你取消选择所有列。我知道我可以将超链接或按钮添加到(表格)占位符,它显示所有列,但它看起来不太好,当表格中没有数据时也会弹出占位符。 – Mati 2014-10-02 11:20:24

+0

嗯...惊讶的是没有列属性isHideable(或我没有看到它) - 你可以显示你的实验代码,正在听visibleLeafColumns? – kleopatra 2014-10-02 13:46:20

回答

1

绝对是一个错误(你可能会考虑在fx'jira中报告它)。你在你的问题中提到的,各地的黑客似乎与摇摆借来一个小窍门工作:延迟能见度回复到一些未来:

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模拟脏,不过,执行可运行程序处于“未来某些未指定的时间”,并且没有声明它与正常(源自ui)事件的关系。

报告为RT-38907,只是固定的(重复的:RT-37616),应该在一两周内以8u40ea的速度上升。