TreeSet не будет сортировать себя после изменения значения в JTable
У меня есть класс Driver
:
@XmlRootElement
public class Driver implements Comparable<Driver>{
private static int nextId=0;
private int id;
private String name;
private LocalDate birth;
private LocalDate hireBegin;
private LocalDate hireEnd;
public Driver(){
super();
}
public Driver(String name, LocalDate birth, LocalDate hireBegin, LocalDate hireEnd) {
this.name = name;
this.birth = birth;
this.hireBegin = hireBegin;
this.hireEnd = hireEnd;
this.id = nextId;
nextId++;
}
public Driver(String name, String birth,String hireBegin, String hireEnd) {
this.name = name;
DateTimeFormatter formatter =DateTimeFormatter.ofPattern("yyyy-MM-dd");
this.birth = LocalDate.parse(birth,formatter);
this.hireBegin = LocalDate.parse(hireBegin,formatter);
this.hireEnd = LocalDate.parse(hireEnd,formatter);
this.id = nextId;
nextId++;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getBirth() {
return birth.toString();
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setBirth(LocalDate birth) {
this.birth = birth;
}
public void setBirth(String birth) {
this.birth = LocalDate.parse(birth, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
public void setHireBegin(LocalDate hireBegin) {
this.hireBegin = hireBegin;
}
public void setHireBegin(String hireBegin) {
this.hireBegin = LocalDate.parse(hireBegin, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
public void setHireEnd(LocalDate hireEnd) {
this.hireEnd = hireEnd;
}
public void setHireEnd(String hireEnd) {
this.hireEnd = LocalDate.parse(hireEnd, DateTimeFormatter.ofPattern("yyyy-MM-dd"));;
}
public String getHireBegin() {
return hireBegin.toString();
}
public String getHireEnd() {
return hireEnd.toString();
}
@Override
public String toString() {
return "Driver{" + "id=" + id + ", name=" + name + ", birth=" + birth + ", hireBegin=" + hireBegin + ", hireEnd=" + hireEnd + '}';
}
@Override
public int compareTo(Driver o) {
int result=0;
result=this.name.compareTo(o.getName());
if(result==0)
result = this.id-o.getId();
return result;
}
}
И у меня есть TreeSet
водителей:
private TreeSet<Driver> collDriver = new TreeSet<>();
Проблема в том, когда я пытаюсь изменить значение элемента в моем JTable
:
@Override
public void setValueAt(Object value, int row, int col){
try{
Driver d = getDriverAtRow(row);
switch(col){
case 1:
d.setName(value.toString());
break;
case 2:
d.setBirth(value.toString());
break;
case 3:
d.setHireBegin(value.toString());
break;
case 4:
d.setHireEnd(value.toString());
break;
}
db.notifyObservers("change in jtable happened");
}
catch(Exception ex){
System.out.println(ex);
//if(listener !=null){
//listener.handleTableModelException(new EventCellException(this,"update of cell is doc"));
//}
}
TreeSet
изменит значение элемента, но не будет сортировать саму таблицу. Например, я напечатал здесь два раза TreeSet
, один раз, прежде чем я изменю значение, и один раз после того, как я изменю его
@Override
public void notifyObservers(Object msg){
setChanged();
super.notifyObservers(msg.toString());
System.out.println(collDriver);
}
Выход:
[Driver{id=1, name=aaa, birth=1111-11-11, hireBegin=1111-11-11, hireEnd=3333-11-14}, Driver{id=0, name=drivername, birth=1111-11-11, hireBegin=1111-11-11, hireEnd=3333-11-14}, Driver{id=2, name=ssss, birth=1111-11-11, hireBegin=1111-11-11, hireEnd=3333-11-14}, Driver{id=3, name=zzz, birth=1111-11-11, hireBegin=1111-11-11, hireEnd=3333-11-14}]
[Driver{id=1, name=aaa, birth=1111-11-11, hireBegin=1111-11-11, hireEnd=3333-11-14}, Driver{id=0, name=drivername, birth=1111-11-11, hireBegin=1111-11-11, hireEnd=3333-11-14}, Driver{id=2, name=ssss, birth=1111-11-11, hireBegin=1111-11-11, hireEnd=3333-11-14}, Driver{id=3, name=qqq, birth=1111-11-11, hireBegin=1111-11-11, hireEnd=3333-11-14}]
Как вы можете видеть TreeSet
больше не сортируется, но значение было изменено. Что может быть причиной?