如何将单击处理程序添加到GWT ImageResource单元格?

如何将单击处理程序添加到GWT ImageResource单元格?,gwt,datagrid,Gwt,Datagrid,请帮我解决这个问题。 我有下面的代码,实际上我想在GWT数据网格中插入一个映像,并在映像中添加一个单击处理程序。但是它对点击没有反应,请问你认为可能是什么问题? 这是资源接口 public interface Resources extends ClientBundle { @Source("delete.png") ImageResource getDeleteImage(); @Source("edit.png") ImageResource g

请帮我解决这个问题。 我有下面的代码,实际上我想在GWT数据网格中插入一个映像,并在映像中添加一个单击处理程序。但是它对点击没有反应,请问你认为可能是什么问题? 这是资源接口

public interface Resources extends ClientBundle {
     @Source("delete.png")
      ImageResource getDeleteImage();

     @Source("edit.png")
      ImageResource getEditImage();
}
下面是我编码的ImageResource单元格,但它不响应单击

DataGrid<AccountDTO> dataGrid = new DataGrid<AccountDTO>();

Column<AccountDTO, ImageResource>delete = new Column<AccountDTO, ImageResource>(new ImageResourceCell()) {

         @Override
            public ImageResource getValue(AccountDTO object) {
              return resources.getDeleteImage();
            }
          };

       delete.setFieldUpdater(new FieldUpdater<AccountDTO, ImageResource>() {

            @Override
            public void update(int arg0, AccountDTO object, ImageResource resource) {

                Window.alert(object.getId() + "" + object.getChargeAccount());
                dataProvider.getList().remove(object);
                dataProvider.refresh();
                dataGrid.redraw();

}
dataGrid.addColumn(delete, "");
dataGrid.setColumnWidth(delete, 3.0, Unit.EM)
DataGrid DataGrid=newdatagrid();
Columndelete=新列(新的ImageResourceCell()){
@凌驾
公共ImageResource getValue(AccountDTO对象){
返回resources.getDeleteImage();
}
};
delete.setFieldUpdater(新的FieldUpdater(){
@凌驾
公共无效更新(int arg0、AccountDTO对象、ImageResource资源){
Window.alert(object.getId()+“”+object.getChargeAccount());
dataProvider.getList().remove(对象);
dataProvider.refresh();
redraw();
}
dataGrid.addColumn(删除“”);
dataGrid.setColumnWidth(delete,3.0,Unit.EM)

与单元格表相同,您可以扩展ClickableTextCell(看一看)。但当您在单元格中使用图像时,它变得很棘手。

这是一个老问题,但有一个比其他答案中建议的简单得多的解决方案

datagrid.addCellPreviewHandler(new Handler<AccountDTO>() {

    @Override
    public void onCellPreview(CellPreviewEvent<AccountDTO> event) {
        if ("click".equals(event.getNativeEvent().getType())) {
            if (event.getColumn() == datagrid.getColumnIndex(myImageColumn)) {
                AccountDTO account = event.getValue();
                // Do what you need with a click
            }
        }
    }

});
datagrid.addCellPreviewHandler(新处理程序(){
@凌驾
公共void onCellPreview(CellPreviewEvent事件){
如果(“单击”.equals(event.getNativeEvent().getType())){
if(event.getColumn()==datagrid.getColumnIndex(myImageColumn)){
AccountDTO account=event.getValue();
//点击一下就可以做你需要的事情
}
}
}
});