2014-04-19 86 views
0

我知道如何排序GWT中的cellTable的TextColumn。如何對GWT中cellTable的CheckBox列進行排序?

也就是說setSortable(true)textColumn

然後聲明ListHandler<String[]> columnSortHandler = new ListHandler<String[]>(myTableList);

然後columnSortHandler.setComparator(textColumn, new MyCellTableColumnComparator(1));

終於getView().getMyCellTable().addColumnSortHandler(columnSortHandler);

但是,如果我們有複選框列&我們要排序複選框列什麼。那就是當用戶點擊CheckBox列的標題時,它會將CheckBox檢查的所有行放在最上面。如果用戶再次單擊CheckBox列的標題,則會將CheckBox取消選中的所有行放在頂部。因此,只有2種可能的選項用於對CheckBox列進行排序,即未選中&。

我們聲明覆選框列如下:

Column<String[], Boolean> checkBoxColumn = new Column<String[], Boolean>(
         new CheckboxCell(true, false)) { 
    @Override 
    public Boolean getValue(String[] object) { 
     return mySelectionModel.isSelected(object); 
    } 
}; 

ckColumn.setSortable(true); 

但那麼如何才能setComparatorcheckBoxColumn

或者你能找到更好的解決方案嗎?

+1

在複選框列上設置比較器的問題到底是什麼? –

+0

好吧,我明白了,看起來複選框對排序沒有影響,所以我只是比較checkBoxColumn,就像我用TextColumn做的一樣,它工作正常。無論如何,請您提醒您。 – Tum

回答

0

我寫了一個示例表,這應該工作開箱:

public class ExampleTable extends CellTable<MyObject> { 

private ArrayList<MyObject> list; 
private ListDataProvider<MyObject> dataProvider = new ListDataProvider<MyObject>(); 

public ExampleTable() { 
    super(); 
    dataProvider.addDataDisplay(this); 

    list = new ArrayList<MyObject>(); 
    for (int i = 0; i < 15; i++) { 
     list.add(new MyObject("Value" + i, false)); 
    } 

    dataProvider.setList(list); 

    TextColumn<MyObject> textColumn = new TextColumn<MyObject>() { 

     @Override 
     public String getValue(MyObject object) { 
      return object.getValue(); 
     } 
    }; 
    this.addColumn(textColumn, "String"); 

    Column<MyObject, Boolean> checkBoxColumn = new Column<MyObject, Boolean>(
      new CheckboxCell(true, true)) { 
     @Override 
     public Boolean getValue(MyObject object) { 

      return object.isEnabled(); 
     } 
    }; 

    checkBoxColumn.setFieldUpdater(new FieldUpdater<MyObject, Boolean>() { 

     @Override 
     public void update(int index, MyObject object, Boolean value) { 
      object.setEnabled(value); 
     } 
    }); 

    this.addColumn(checkBoxColumn, "Boolean"); 
    checkBoxColumn.setSortable(true); 

    ListHandler<MyObject> columnSortHandler = new ListHandler<MyObject>(
      dataProvider.getList()); 

    columnSortHandler.setComparator(checkBoxColumn, 
      new Comparator<MyObject>() { 

       @Override 
       public int compare(MyObject arg0, MyObject arg1) { 
        return (arg0.isEnabled() == arg1.isEnabled() ? 0 
          : (arg1.isEnabled() ? 1 : -1)); 
       } 
      }); 
    this.addColumnSortHandler(columnSortHandler); 

} 

    }; 

的MyObject的只是一個簡單的POJO:

public class MyObject { 
private String value; 
private boolean enabled; 

public MyObject(String value, boolean status) { 
    this.value = value; 
    this.enabled = status; 
} 

public String getValue() { 
    return value; 
} 

public void setValue(String value) { 
    this.value = value; 
} 

public boolean isEnabled() { 
    return enabled; 
} 

public void setEnabled(boolean status) { 
    this.enabled = status; 
} 

} 

它使用在創建時填充列表是非常重要的ListHandler。如果你不想要可更新的布爾列,只需刪除FieldUpdater

+0

XCheckBoxColumn排序與TextColumn排序相同,我想通了 – Tum