2014-01-31 3 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) 생성자를 사용하십시오.
  2. TreeMap을 사용하십시오. Set 생성자는 기본적으로 LinkedHashMap을 생성하며 이는 순서를 유지하지 않습니다.
  3. Option 코드에 compareTo method을 올바르게 구현하십시오.
0

다음은 combox 상자의 항목을 정렬하는 방법입니다. Option의 순서를 알려주는 추가 필드를 추가해야 할 수도 있습니다.

첫째는 Comparable 인터페이스를 Comparator를 사용하거나 구현 중 하나에 의해 Option 정렬, 다음

  • 먼저 제거 모든 항목을 확인합니다.
  • 목록 정렬
  • 그런 다음 정렬 된 목록에서 항목을 다시 추가하십시오.

    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 + "}"; 
    } 
} 
관련 문제