2015-02-19 15 views
2

Приведенный ниже код этой Outout:Сортировка столбцов таблицы на заголовке?

enter image description here

Если вы попробуете этот код, Vaadin автоматически умеет сортировать по CARMAKE & TopSpeed ​​при нажатии на их заголовки.

PASSENGER & DRIVER не сортируются в заголовке.

Как это сделать? Где в таблице говорится: «Я не знаю, как сортировать что-то типа ЧЕЛОВЕКА, чтобы я не добавил слушателя кликов к этому заголовку»?

Мне удалось удлинить балкуItemContainer & переопределить метод сортировки. Затем я мог бы добавить кнопки в представление, сортирующие столбцы. Но я хочу иметь возможность щелкнуть заголовки таблиц!

Я думал, что могу добавить TableHeaderClickListeners, но почему ваадин уже делает это для меня, когда я переопределяю сортировку beanItemContainer? Это уже сделано для CARMAKE & TOPSPEED.

@Override 
public void init(VaadinRequest request) { 

    BeanItemContainer<SportsCar> beans = new BeanItemContainer<SportsCar>(SportsCar.class); 

    Person tom = new Person("Tom"); 
    Person dick = new Person("Dick"); 
    Person harry = new Person("Harry"); 

    beans.addBean(new SportsCar("ferrari",180.0,tom,dick)); 
    beans.addBean(new SportsCar("Aston Martin",165.0,harry,null)); 

    Table t = new Table(); 
    t.setContainerDataSource(beans); 
    t.setSizeFull(); 
    this.setContent(t); 

} 

public class SportsCar { 
    String carMake; 
    double topspeed; 
    Person driver; 
    Person Passenger; 

    public SportsCar(String carMake, double topspeed, Person driver, Person passenger) { 
     this.carMake = carMake; 
     this.topspeed = topspeed; 
     this.driver = driver; 
     this.Passenger = passenger; 
    } 

    /** 
    * Get the carMake. 
    * 
    * @return the carMake. 
    */ 
    public String getcarMake() { 
     return carMake; 
    } 

    /** 
    * Set the carMake. 
    * 
    * @param carMake 
    *   the carMake. 
    */ 
    public void setcarMake(String carMake) { 
     this.carMake = carMake; 
    } 

    /** 
    * Get the topspeed. 
    * 
    * @return the topspeed. 
    */ 
    public double getTopspeed() { 
     return topspeed; 
    } 

    /** 
    * Set the topspeed. 
    * 
    * @param topspeed 
    *   the topspeed. 
    */ 
    public void setTopspeed(double topspeed) { 
     this.topspeed = topspeed; 
    } 

    /** 
    * Get the driver. 
    * 
    * @return the driver. 
    */ 
    public Person getDriver() { 
     return driver; 
    } 

    /** 
    * Set the driver. 
    * 
    * @param driver 
    *   the driver. 
    */ 
    public void setDriver(Person driver) { 
     this.driver = driver; 
    } 

    /** 
    * Get the passenger. 
    * 
    * @return the passenger. 
    */ 
    public Person getPassenger() { 
     return Passenger; 
    } 

    /** 
    * Set the passenger. 
    * 
    * @param passenger 
    *   the passenger. 
    */ 
    public void setPassenger(Person passenger) { 
     Passenger = passenger; 
    } 

} 

public class Person { 

    String carMake; 

    /** 
    * Create a Demo.Person. 
    */ 
    public Person(String carMake) { 
     this.carMake = carMake; 
    } 

    /** 
    * Get the carMake. 
    * 
    * @return the carMake. 
    */ 
    public String getcarMake() { 
     return carMake; 
    } 

    /** 
    * Set the carMake. 
    * 
    * @param carMake 
    *   the carMake. 
    */ 
    public void setcarMake(String carMake) { 
     this.carMake = carMake; 
    } 

    @Override 
    public String toString(){ 
     return carMake; 
    } 
} 

ответ

2

Java не знает, как сравнивать объекты как таковые. Сначала вы должны указать, что эти объекты можно сравнить, реализуя интерфейс «Comparable». Затем вам нужно переопределить метод CompareTo следующим образом:

public int compareTo(Person p) { 
    return getcarMake().compareTo(p.getcarMake()); 
} 

это должно сделать трюк (я не проверял, хотя).

Смежные вопросы