我想使用表格菜单按钮(table.setTableMenuButtonVisible(true);
)来隐藏和显示TableView中的指定列。当我取消选择所有列时,[+]按钮隐藏,“表中没有列”弹出,用户无法显示任何列。
我试图通过监听table.getVisibleLeafColumns()
并显示最后隐藏的列来阻止隐藏所有列,但是在菜单按钮的ChoiceBox中,此列未被选中。
答案 0 :(得分: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)事件的关系。