簡體   English   中英

JAVA FX排序組合框值

[英]JAVA fx sorting combobox values

我有一個組合框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) {
     }
   }

將項目設置為組合框時,請確保已對它們進行了排序。 如果要比較的字符串使用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); 
           }
    };
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM