2014-01-31 49 views
0

我想從數據庫中獲取名稱和ID並將它們添加到組合框中。我已經將這個checkcombobox添加到了我的項目中;排序Java組合框項目

http://chianti.ucsd.edu/svn/csplugins/trunk/soc/jgao/IDMapping/src/csplugins/id/mapping/ui/CheckComboBox.java

這段代碼的幫助; https://stackoverflow.com/a/17097767

  ResultSet resultSet= "here getting the result set with query having a ORDER BY clause 

      while (resultSet.next()) { 
       int id = resultSet.getInt(1); 
       String name = resultSet.getString(2); 
       System.out.println(name); 
       options.add(new Option<Integer>(name, id)); 
      } 

的System.out.println使輸出按名稱排序,但在checkcombobox項目不排序。我如何添加組合框中排序的項目?

回答

0
  1. 不要使用Set構造函數,請使用CheckComboBox(Map<Object, Boolean> mapObjSelected)構造函數。使用TreeMapSet構造函數默認創建LinkedHashMap,它不保留順序。
  2. Option的代碼中正確實施compareTo method。您可能需要添加一個額外的字段,以告訴Option它們應該處於什麼順序。
0

以下是對combox框中的項目進行排序的方法。

首先請您Option排序使用Comparator或實現Comparable接口要麼,然後

  • 首先刪除所有項目。
  • 排序清單
  • 然後從排序列表中添加項目。

    Collections.sort(options); 
    comboBox.removeAllItems(); 
    for (Option s : options) { 
        comboBox.addItem(s); 
    } 
    

完整示例

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

public class SortCombo { 

    JComboBox comboBox; 
    JButton sortButton; 
    List<Option> options; 

    public SortCombo() { 
     options = createOptions(); 

     comboBox = new JComboBox(options.toArray()); 
     sortButton = new JButton("Sort"); 

     sortButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       Collections.sort(options); 
       comboBox.removeAllItems(); 
       for (Option s : options) { 
        comboBox.addItem(s); 
       } 
      } 
     }); 
     JFrame frame = new JFrame("Sort ComboBox"); 
     frame.add(comboBox, BorderLayout.CENTER); 
     frame.add(sortButton, BorderLayout.SOUTH); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public List<Option> createOptions() { 
     List<Option> list = new ArrayList<>(); 
     list.add(new Option("John", 1)); 
     list.add(new Option("Sean", 2)); 
     list.add(new Option("Jake", 3)); 
     list.add(new Option("Mike", 4)); 
     list.add(new Option("Abby", 5)); 
     list.add(new Option("Paul", 6)); 
     list.add(new Option("Daniel", 7)); 
     list.add(new Option("Chris", 8)); 
     return list; 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new SortCombo(); 
      } 
     }); 
    } 
} 

class Option implements Comparable<Option> { 

    private String name; 
    private int id; 

    public Option(String name, int id) { 
     this.name = name; 
     this.id = id; 
    } 

    @Override 
    public int compareTo(Option option) { 
     return this.name.compareTo(option.name); 
    } 

    @Override 
    public String toString() { 
     return name + " {" + id + "}"; 
    } 
}