复合单元事件处理

时间:2015-10-08 07:05:04

标签: gwt grid gxt uibinder

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

我正在附加我的复合单元格代码以及参考按钮。

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;

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您可以在每个按钮的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 {}
}