2017-02-24 24 views
0

当我尝试对向其添加新元素之后开始添加新元素的javafx ListView对象进行排序时,我遇到了一些奇怪的行为。 用于排序的代码是ListView对添加的成员进行排序,就好像它们是原始列表后面的另一个排序列表一样

movieList.getItems().add(newMovie); 
    if(mainController.getListingOrder().equals("title")) 
    { 
    movieList.getItems().sort(Movie.getTitleComparator()); 
    } 
    else 
    { 
    movieList.getItems().sort(Movie.getYearComparator()); 
    } 

的getTitleComparator()方法是如下

public static Comparator<Movie> getTitleComparator() 
    { 
    return new Comparator<Movie>() 
    { 
     @Override 
     public int compare(Movie movie1, Movie movie2) 
     { 
     return movie1.getTitle().compareTo(movie2.getTitle()); 
     }  
    }; 
    } 

三个以下图片应该有希望说明我有这个问题。

任何元素之前加入:

Before any elements added:

后1个元素加入:

After one element added:

加入三种元素之后:

After adding three elements:

正如您所看到的,添加的元素将按字母顺序相互排序,但不会与列表中已有的元素进行排序。有什么办法可以让所有的元素都按字母顺序排序,而不是像两个单独排序的数组一样放在一起?

回答

1

您按区分大小写的顺序比较字符串。

而不是a.compareTo(b)做:

String.CASE_INSENSITIVE_ORDER.compare(a, b) 
+0

您发布的确切SNIPPIT你没有工作,而是因为你的评论我想:'movie1.getTitle()与compareToIgnoreCase(movie2.getTitle()); ' 它工作。非常感谢你! –