JavaFX:在TableView列中禁用默认排序

时间:2017-02-03 03:18:02

标签: java sorting javafx javafx-8 tablecolumn

当我点击TableView中的表格列时,它会从ascendingdescendingdefault(无箭头)中切换。如何在ascendingdescending之间切换?

1 个答案:

答案 0 :(得分:0)

我干涉了TableViewTableColumn的许多属性,我找到了自己的解决方案。它绝对不优雅,也不是线程安全的,但至少它是有效的,而且很简单。

public static final <T> void disableColumnUnsortedOnClick(TableView<T> tableView)
{
    tableView.getSortOrder().addListener(new ListChangeListener<TableColumn<T, ?>>()
    {
        @Override
        public void onChanged(
                javafx.collections.ListChangeListener.Change<? extends TableColumn<T, ?>> c)
        {
            while (c.next())
            {
                if (c.wasRemoved() && c.getRemovedSize() == 1 && !c.wasAdded())
                {
                    final TableColumn<T, ?> removedColumn = c.getRemoved().get(0);

                    removedColumn.getTableView().getSortOrder().add(removedColumn);
                    removedColumn.setSortType(SortType.ASCENDING);
                }
            }
        }
    });
}