按it动态排序JComboBox';java中的项目属性
我想按JComboBox的项目属性对其项目进行排序: 我有这门课:按it动态排序JComboBox';java中的项目属性,java,swing,sorting,dynamic,jcombobox,Java,Swing,Sorting,Dynamic,Jcombobox,我想按JComboBox的项目属性对其项目进行排序: 我有这门课: public class Person { private static _ID; private _Name; private _FamilyName; public MyObject (int id, String name, String familyName){ _ID = id; _Name = name; _FamilyName = fa
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中显示的值,我只需要更改的顺序。您应该能够使用
默认情况下,它将按照添加到模型中的对象的自然排序顺序进行排序,或者您可以提供自定义比较器。首先,您的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提到的排序组合框模型允许您以一种方式对Person实例进行排序。要以3种不同的方式对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;
}
}
}
公共类NameSort实现了Comparator{
@凌驾
公共整数比较(人员arg0、人员arg1){
int result=arg0.get_Name().compareToIgnoreCase(arg1.get_Name());
如果(结果==0){
返回arg0.get_FamilyName().compareToIgnoreCase(
arg1.get_FamilyName());
}否则{
返回结果;
}
}
}
您应该能够编写其他2个比较器类
最后,您需要对JComboBox的输入进行排序。最简单的方法是保存一个列表,并将排序后的Person[]传递给JComboBox。这里有一种方法
public Person[] sortPersonsByName(List<Person> persons) {
Collections.sort(persons, new NameSort());
return persons.toArray(new Person[persons.size()]);
}
public Person[]排序人员姓名(列出人员){
Collections.sort(persons,new NameSort());
返回persons.toArray(新persons[persons.size()]);
}
此代码将在sort JButton的操作侦听器中调用