复合单元格事件处理

Composite cell event Handling

我在网格中使用复合单元格,它有两个 buttons.I 想处理两个按钮上的点击事件 seperately.Is 可能吗? 请详细说明如何分别处理这些事件。

我将我的复合单元格代码与按钮一起附加以供参考。

private CompositeCell<FilterInfo> createCompositeCell(){

HasCell<FilterInfo, String> button1= new HasCell<FilterInfo, String>() {

  public Cell<String> getCell() {
    return new TextCell();
  }

  public FieldUpdater<FilterInfo, String> getFieldUpdater() {
    // TODO Auto-generated method stub
    return null;
  }

  public String getValue(FilterInfo object) {
    return "button 1";
  }};

  HasCell<FilterInfo, String> button2= new HasCell<FilterInfo,String>(){

    public Cell<String> getCell() {
      return new ButtonCell();
    }

    public FieldUpdater<FilterInfo, String> getFieldUpdater() {
      // TODO Auto-generated method stub
      return null;
    }

    public String getValue(FilterInfo object) {
      // TODO Auto-generated method stub
      return "button 2";
    }
  };

  List<HasCell<FilterInfo, ?>> cells = new ArrayList<HasCell<FilterInfo, ?>>();
  cells.add(button1);
  cells.add(button2);

  CompositeCell<FilterInfo> compositeCell = new CompositeCell<FilterInfo>(cells);

  return compositeCell;

我建议您创建自定义单元格并覆盖 onBrowserEventrender 方法。在onBrowserEvent方法中处理点击事件。

参考http://www.gwtproject.org/doc/latest/DevGuideUiCustomCells.html

您在每个按钮的 FieldUpdater 中处理点击事件。

这是最小的工作示例:

package com.adam.test.client;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.cell.client.ButtonCell;
import com.google.gwt.cell.client.CompositeCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.cell.client.HasCell;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;

public class Test implements EntryPoint {

    @Override
    public void onModuleLoad() {
        CompositeCell<FilterInfo> compositeCell = createCompositeCell();
        CellList<FilterInfo> list = new CellList<FilterInfo>(compositeCell);

        List<FilterInfo> values = new ArrayList<FilterInfo>();
        values.add(new FilterInfo());
        values.add(new FilterInfo());
        values.add(new FilterInfo());
        list.setRowData(values);

        RootPanel.get().add(list);
    }

    private CompositeCell<FilterInfo> createCompositeCell() {
        Column<FilterInfo, String> button1Column = new Column<FilterInfo, String>(new ButtonCell()) {
            @Override
            public String getValue(FilterInfo object) {
                return "Button 1";
            }
        };
        button1Column.setFieldUpdater(new FieldUpdater<FilterInfo, String>() {
            @Override
            public void update(int index, FilterInfo object, String value) {
                Window.alert("Button 1 clicked!");
            }
        });

        Column<FilterInfo, String> button2Column = new Column<FilterInfo, String>(new ButtonCell()) {
            @Override
            public String getValue(FilterInfo object) {
                return "Button 2";
            }
        };
        button2Column.setFieldUpdater(new FieldUpdater<FilterInfo, String>() {
            @Override
            public void update(int index, FilterInfo object, String value) {
                Window.alert("Button 2 clicked!");
            }
        });

        ArrayList<HasCell<FilterInfo, ?>> compositeColumns = new ArrayList<HasCell<FilterInfo, ?>>();
        compositeColumns.add(button1Column);
        compositeColumns.add(button2Column);

        return new CompositeCell<FilterInfo>(compositeColumns);
    }

    private class FilterInfo {}
}