Events 细胞树选择

Events 细胞树选择,events,gwt,tree,selection,Events,Gwt,Tree,Selection,我有一个细胞树,它利用了一个带有CheckboxCells的多选模型作为复合细胞的一部分。这一切似乎都在起作用 我实际上要做的是在我的界面中为树中可以选择的每个项目生成选项卡。听起来很琐碎,但如何在selectionChange上获取MyData却让我感到困惑。 这些项目需要保持选中状态,这样,如果我以后取消选中它们,选项卡将再次被删除 我需要获取刚刚选择的项目的MyData,以便知道选项卡的内容应该是什么 final MultiSelectionModel<TableLi

我有一个细胞树,它利用了一个带有CheckboxCells的多选模型作为复合细胞的一部分。这一切似乎都在起作用

我实际上要做的是在我的界面中为树中可以选择的每个项目生成选项卡。听起来很琐碎,但如何在selectionChange上获取MyData却让我感到困惑。 这些项目需要保持选中状态,这样,如果我以后取消选中它们,选项卡将再次被删除

我需要获取刚刚选择的项目的MyData,以便知道选项卡的内容应该是什么

        final MultiSelectionModel<TableLight> selectionModel = new MultiSelectionModel<TableLight>();
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {

        public void onSelectionChange(SelectionChangeEvent event) {

        }
    });
final MultiSelectionModel selectionModel=new MultiSelectionModel();
selectionModel.addSelectionChangeHandler(新的SelectionChangeEvent.Handler(){
选择更改时公共无效(选择更改事件){
}
});
我觉得我完全忽略了显而易见的事情。在selectionChange事件中,我所能做的就是询问我的选择处理程序以查看所选集是什么。是否有一种方法可以将侦听器附加到特定的树选择,而不是全局“something has change”侦听器


任何提示都将不胜感激。

您必须访问selectionModel上的getSelectedSet(),才能获取CellTree中的选定项。不幸的是,现在似乎有了获取最后一个选定项目的方法(如SingleSelectionModel

final MultiSelectionModel selectionModel=new MultiSelectionModel();
selectionModel.addSelectionChangeHandler(新的SelectionChangeEvent.Handler(){
选择更改时公共无效(选择更改事件){
Set selectedItems=selectionModel.getSelectedSet();
}
});

好的,对于以后发现这一点的任何人,都有办法

将CheckboxCell添加到CompositeCell时,可以指定要返回的FieldUpdater,该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);
            }
        });
HasCell.add(新的HasCell(){
//包含复选框的单元格
private Cell=new CheckboxCell(真、假);
公共单元getCell(){
返回单元;
}
公共字段更新程序getFieldUpdater(){
返回新的FieldUpdater(){
公共void更新(int索引、TableLight对象、布尔值){
如果(值){
tablesTabPanel.addTable(对象);
}否则{
表选项卡面板。可移除(对象);
}
}
};
}
公共布尔getValue(TableLight对象){
返回selectionModel.isSelected(对象);
}
});

另外,为了避免混淆。当我在上面谈到MyData时,示例中的TableLight就是这样。

添加扩展选择模型将获得最后一个选定的元素:

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
            }
        }
    };
gridSelectionModel=新的多选模型(密钥提供者){
已选择公共无效设置(MyData MyData,已选择布尔值){
super.setSelected(myData,selected);
如果(选定){
System.out.println(“选择设置”+myData);
//现在调用一些ui处理程序来使用最后选择的myData元素
}
}
};

我希望这会有帮助。

是的,这真的很糟糕,因为很明显,信息是内部已知的。我想也许还有别的办法。我所要做的就是获取所选的集合,然后查找集合差异以添加/删除选项卡。
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
            }
        }
    };