我想根据它的项目attributs对JComboBox的项目进行排序:
我有这堂课:
public class Person {
private static _ID;
private _Name;
private _FamilyName;
public MyObject (int id, String name, String familyName){
_ID = id;
_Name = name;
_FamilyName = familyName;
}
@Override
public toString (){
return _Name;
}
}
我有一个JComboBox:
JComboBox comboBox = new JComboBox();
comboBox.addItem( new Person(1,"Richard","Stallman") );
comboBox.addItem( new Person(2,"Douglas","Adams") );
comboBox.addItem( new Person(3,"Terry","Pratchett") );
comboBox.addItem( new Person(4,"Goreges","Brassens") );
我希望用户选择他想要对JComboBox进行排序的方式:
JComboBox comboBoxSort = new JComboBox();
comboBoxSort.addItemSort("ID");
comboBoxSort.addItemSort("Name");
comboBoxSort.addItemSort("Family Name");
我不需要更改JComboBox中显示的值,我只需要更改订单。
答案 0 :(得分:1)
您应该可以使用Sorted Combo Box Model。
默认情况下,它会根据添加到模型的对象的自然排序顺序进行排序,或者您可以提供自定义比较器。
答案 1 :(得分:0)
首先,你的Person类在语法上是错误的。这是一个更正版本。
public class Person {
private static int _ID_COUNTER = 0;
private int _ID;
private String _Name;
private String _FamilyName;
public Person(String name, String familyName) {
_ID = ++ID_COUNTER;
_Name = name;
_FamilyName = familyName;
}
@Override
public String toString() {
return _Name;
}
public int get_ID() {
return _ID;
}
public String get_Name() {
return _Name;
}
public String get_FamilyName() {
return _FamilyName;
}
}
camickr提到的Sorted Combo Box模型允许您以一种方式对Person实例进行排序。要以不同的方式对Person实例进行排序,您需要编写3个Comparator类。这是一个名字。
public class NameSort implements Comparator<Person> {
@Override
public int compare(Person arg0, Person arg1) {
int result = arg0.get_Name().compareToIgnoreCase(arg1.get_Name());
if (result == 0) {
return arg0.get_FamilyName().compareToIgnoreCase(
arg1.get_FamilyName());
} else {
return result;
}
}
}
您应该能够编写其他2个比较器类。
最后,您需要将输入排序到JComboBox。最简单的方法是保留List&lt; Person&gt;并将已排序的Person []传递给JComboBox。这是一种方法。
public Person[] sortPersonsByName(List<Person> persons) {
Collections.sort(persons, new NameSort());
return persons.toArray(new Person[persons.size()]);
}
此代码将在您的排序JButton的动作侦听器中调用。