jComboBox
要素リストをソート済みリストにソートする方法。
JComboBox box=new JComboBox();
box.addItem("abc");
box.addItem("zzz");
box.addItem("ccc");
add(box);
多くの jComboBox コンポーネントを使用しましたが、機能していません。このリストを昇順に並べ替えるにはどうすればよいですか?
をご覧いただけますSortedComboBoxModel
。
このモデルは DefaultComboBoxModel を拡張し、次の 2 つの追加機能が組み込まれています。
- モデルの作成時に、提供されたデータは前にソートされます
- モデルに新しいアイテムを追加するときにデータがモデルに追加され、アイテムはソート順を維持するために挿入されます
デフォルトのソート順は、モデルに追加された項目の自然なソート順になります。ただし、カスタム Comparator をコンストラクターのパラメーターとして指定することで、これを制御できます。
これを使用する方法の例を次に示します(そこから取得):
String[] items = { "one", "two", "three" };
SortedComboBoxModel<String> model = new SortedComboBoxModel<String>(items);
JComboBox<String> comboBox = new JComboBox<String>(model);
comboBox.addItem("four");
comboBox.addItem("five");
comboBox.setSelectedItem("one");
addItem
のデフォルトの動作は、ニーズに合わせてオーバーライドできます。
実行可能な例
public class SortedCombobox {
@SuppressWarnings("serial")
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("Overriden JCombobox");
frame.getContentPane().setLayout(new BorderLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComboBox box = new JComboBox(){
@Override public void addItem(Object obj){
int count = getItemCount();
String toAdd = (String) obj;
List<String> items = new ArrayList<String>();
for(int i = 0; i < count; i++){
items.add((String)getItemAt(i));
}
if(items.size() == 0){
super.addItem(toAdd);
return;
}else{
if(toAdd.compareTo(items.get(0)) <= 0){
insertItemAt(toAdd, 0);
}else{
int lastIndexOfHigherNum = 0;
for(int i = 0; i < count; i++){
if(toAdd.compareTo(items.get(i)) > 0){
lastIndexOfHigherNum = i;
}
}
insertItemAt(toAdd, lastIndexOfHigherNum+1);
}
}
}
};
box.addItem("zzz");
box.addItem("hh");
box.addItem("aa");
box.addItem("yy");
box.addItem("uu");
box.addItem("bb");
box.addItem("rr");
box.addItem("aa");
box.setSelectedIndex(0);
frame.getContentPane().add(box);
frame.pack();
frame.setVisible(true);
}
});
}
}