JAVA fx排序组合框值

时间:2015-08-08 09:40:42

标签: java mysql combobox javafx

我有一个带有值的组合框cboTEST,例如:

  • U7A
  • U4B
  • U6C
  • U1Z
  • U7B

第一个字母总是“U”..

我想先在第二个数字上排序我的组合框,最后按字母顺序排序:

解决方案结果:

  • U1Z
  • U4B
  • U6C
  • U7A
  • U7B
  • U9R

我该怎么做?

修改 这是我的方法,我用数据库选择语句中的值填充我的组合框:

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) {
     }
   }

1 个答案:

答案 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); 
           }
    };
}