我在网格中使用了一个复合单元,它有两个按钮。我想单独处理两个按钮上的点击事件。这可能吗? 请详细说明如何单独处理这些事件。
我正在附加我的复合单元格代码以及参考按钮。
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;
答案 0 :(得分:0)
我建议您创建自定义单元格并覆盖onBrowserEvent
和render
方法。处理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 {}
}