我有一个 CellTree ,它使用带有 CheckboxCells 的MultiSelectionModel作为复合单元格的一部分。这一切似乎都有效。
我实际上要做的是在界面中为可以在树中选择的每个项目生成选项卡。听起来微不足道,但我对如何在 selectionChange 上获得 MyData 感到困惑。 这些项目需要选择,这样如果我以后取消选择,则会再次删除这些标签。
我需要为刚选择的项目获取 MyData ,以便知道该标签的内容应该是什么。
final MultiSelectionModel<TableLight> selectionModel = new MultiSelectionModel<TableLight>();
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
public void onSelectionChange(SelectionChangeEvent event) {
}
});
我觉得我完全错过了显而易见的事实。我在 selectionChange 事件中所能做的就是询问我的选择处理程序以查看所选集合是什么。有没有办法可以将侦听器附加到特定的树选择而不是全局,“某些内容已更改”侦听器。
任何提示都会非常感激。
答案 0 :(得分:7)
添加扩展选择模型将为您提供最后选择的元素:
gridSelectionModel = new MultiSelectionModel<MyData>(KEY_PROVIDER){
public void setSelected(MyData myData, boolean selected) {
super.setSelected(myData, selected);
if (selected){
System.out.println("setSelected selected " + myData);
// call now some ui handler to use the last selected myData element
}
}
};
我希望这会有所帮助。
答案 1 :(得分:4)
好的,对于后来发现这一点的人来说,有办法!
当您将CheckboxCell添加到CompositeCell时,您可以指定要返回的FieldUpdater,该字段在更改时将被调用。
hasCells.add(new HasCell<TableLight, Boolean>() {
// Cell containing checkbox
private Cell cell = new CheckboxCell(true, false);
public Cell<Boolean> getCell() {
return cell;
}
public FieldUpdater<TableLight, Boolean> getFieldUpdater() {
return new FieldUpdater<TableLight, Boolean>() {
public void update(int index, TableLight object, Boolean value) {
if (value) {
tablesTabPanel.addTable(object);
} else {
tablesTabPanel.removeTable(object);
}
}
};
}
public Boolean getValue(TableLight object) {
return selectionModel.isSelected(object);
}
});
另外,只是为了避免混淆。当我在谈论上面的MyData时,就是示例中的TableLight。
答案 2 :(得分:2)
您必须访问 selectionModel 上的 getSelectedSet()才能获取CellTree中的所选项目。不幸的是,现在似乎有了如何获取最后选择的项目(例如 SingleSelectionModel )。
final MultiSelectionModel<TableLight> selectionModel = new MultiSelectionModel<TableLight>();
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
public void onSelectionChange(SelectionChangeEvent event) {
Set<TableLight> selectedItems = selectionModel.getSelectedSet();
}
});