Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按it动态排序JComboBox';java中的项目属性_Java_Swing_Sorting_Dynamic_Jcombobox - Fatal编程技术网

按it动态排序JComboBox';java中的项目属性

按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

我想按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中显示的值,我只需要更改的顺序。

您应该能够使用


默认情况下,它将按照添加到模型中的对象的自然排序顺序进行排序,或者您可以提供自定义比较器。

首先,您的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的操作侦听器中调用