我想使用表格菜单按钮 (table.setTableMenuButtonVisible(true);
) 在 TableView 中隐藏和显示指定的列。当我取消选择所有列时,[+] 按钮隐藏,弹出“表格中没有列”并且用户无法显示任何列。
我试图通过监听 table.getVisibleLeafColumns()
并显示最后隐藏的列来防止隐藏所有列,但随后在菜单按钮的 ChoiceBox 中未选择此列。
最佳答案
绝对是一个错误(您可以考虑在 fx' jira 中报告它)。您在问题中提到的 hack-around 似乎与从 Swing 中借用的一个小技巧一起工作:延迟对 future 可见性的恢复:
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 的执行是在“ future 某个未指定的时间”并且没有说明它与正常(源自 ui)事件的关系。
关于JavaFX 防止 TableMenuButton 隐藏所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26141262/