我有一个带有值的组合框cboTEST,例如:
第一个字母总是“U”..
我想先在第二个数字上排序我的组合框,最后按字母顺序排序:
解决方案结果:
我该怎么做?
修改 这是我的方法,我用数据库选择语句中的值填充我的组合框:
private void getData() {
DataDB db = new DataDB();
try{
ArrayList<DataBag> dataList= db.searchData(); //select * from ..
for(DataBag data : dataList) {
String name= data.getName();
cboPloegen.getItems().add(name);
}
} catch (ApplicationException ae) {
} catch (DBException ae) {
}
}
答案 0 :(得分:0)
将项目设置为组合框时,请确保它们已经排序。 如果要比较的字符串使用Java中的字符串的自然比较(如您的示例所示),那么您可以使用(如ItachiUchiha的评论中所述):
ObservableList<String> list = ...;
Collections.sort(list);
cboTEST.setItems(list);
但是,如果您要排序的项目未实现Comparable
或自然排序不符合您的需求,那么您必须使用Comparator
:
private void getData() {
DataDB db = new DataDB();
try{
ArrayList<DataBag> dataList= db.searchData(); //select * from ..
Collections.sort(dataList, getComparator());
for (DataBag data : dataList) {
String name= data.getName();
cboPloegen.getItems().add(name);
}
} catch (ApplicationException ae) {
} catch (DBException ae) {
}
}
getComparator()
方法看起来应该是
private static Comparator<DataBag> getComparator() {
return new Comparator<DataBag>() {
@Override
public int compare(DataBag o1, DataBag o2) {
String name = o1.getName();
String name2 = o2.getName();
// ordering is the natural String ordering in your example
return name.compareTo(name2);
}
};
}