Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向TableColumn添加自定义排序算法_Java_Sorting_Javafx_Tableview - Fatal编程技术网

Java 向TableColumn添加自定义排序算法

Java 向TableColumn添加自定义排序算法,java,sorting,javafx,tableview,Java,Sorting,Javafx,Tableview,我的问题是: 为表格列的默认排序设置自定义排序算法 背景: 作为一个示例列,我想使用一个列,该列将IPv4地址表示为字符串。因此,默认排序是字典排序(1.1.1.1、1.1.1.10、1.1.1.2)。但是我想要一个数字排序(1.1.1.1,1.1.1.2,1.1.1.10) 排序算法不是问题所在。我可以使用按钮触发此排序,并且表视图中的显示是正确的。但我想做的是单击列标题,从而调用我的排序算法 一般条件: 表中的数据位于可观察列表,该列表包装在分类列表中 我现在的问题是:如何实现这一点?您需要

我的问题是:

表格列
的默认排序设置自定义排序算法

背景: 作为一个示例列,我想使用一个列,该列将IPv4地址表示为
字符串
。因此,默认排序是字典排序(1.1.1.1、1.1.1.10、1.1.1.2)。但是我想要一个数字排序(1.1.1.1,1.1.1.2,1.1.1.10)

排序算法不是问题所在。我可以使用
按钮
触发此排序,并且
表视图
中的显示是正确的。但我想做的是单击列标题,从而调用我的排序算法

一般条件: 表中的数据位于
可观察列表
,该列表包装在
分类列表


我现在的问题是:如何实现这一点?

您需要绑定比较器。单击列标题时,将使用列的比较器,如果再次单击,将使用该比较器的相反顺序。如果使用的是
SortedList
,并且每列都有不同的比较器,请将列表的比较器属性绑定到表的比较器属性。这样,当您单击标题时,也会通知您的列表,并更新您的数据:

columnA.setComparator(比较器1);
B列。设置比较器(比较器2);
列C.设置比较器(比较器3);
ObservableList items=FXCollections.observableArrayList();
SortedList SortedList=新分拣列表(项目);
sortedList.comparatorProperty().bind(tableView.comparatorProperty());
tableView.setItems(分类列表);

y您可以通过指定自定义比较器来确定排序顺序,但不能使用您提到的类型更改排序算法。可能最方便的方法是使用,它不需要在场景中放置额外的控件,只需使用列标题进行排序。谢谢。我会尽快尝试。这就是解决方案!谢谢。您只需阅读TableColumn/Base和TableView的api文档就可以找到它。。只需说;)