我想要一列满按钮[我自己的自定义按钮],并希望在我的应用程序中为这些按钮设置点击处理程序?如何创建代码?
由于
Cell cell = new AbstractCell() {
@Override
public void render( com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb )
{
FlowPanel fp = new FlowPanel();
custombutton tb = new custombutton ("click");
tb.setText( value );
fp.add( tb );
sb.appendHtmlConstant( fp.getElement().getString() );
}
};
// Address.
Column<ContactInfo, String> addressColumn = new Column<ContactInfo, String>( cell )
{
@Override
public String getValue( ContactInfo object )
{
return object.getAddress();
}
这是我的代码,如果ContactInfo.getid()为true,我应该为该列创建按钮,但现在是为所有列创建的?请提出一些想法?,
答案 0 :(得分:0)
您可以使用ActionCell,然后对其应用CSS,使其看起来像您喜欢的任何方式。
请参阅GWT Showcase,了解如何执行此操作:http://gwt.googleusercontent.com/samples/Showcase/Showcase.html#!CwCellSampler
答案 1 :(得分:0)
我通过创建一个接受自定义Action对象列表的新自定义单元格来实现类似的功能。
Action{
String id;
boolean clicked;
ClickHandler handler;
}
CustomCell extends AbstractCell<List<Action>>{
}
在render方法中,我为动作列表中的每个动作对象创建了一个具有“id”值的按钮元素。
@Template("<button id=\"{0}\"></button>")
SafeHtml buttonHtml(String id);
public void render(Context context, List<Action> rowActions, SafeHtmlBuilder sb) {
for(Action action: rowActions){
sb.append(buttonHtml(action.getId()));
}
}
在onBrowserEvent中,当发生单击时,如果它发生在span元素中,我们可以获取该span元素的id,并将相应的action对象设置为clicked状态。
@Override
public void onBrowserEvent(Context context, Element parent, List<Action> value, NativeEvent event,
ValueUpdater<List<Action>> valueUpdater) {
// Let AbstractCell handle the keydown event.
super.onBrowserEvent(context, parent, value, event, valueUpdater);
// Handle the click event.
if ("click".equals(event.getType())) {
// Ignore clicks that occur outside of the outermost element.
EventTarget eventTarget = event.getEventTarget();
if (parent.isOrHasChild(Element.as(eventTarget))) {
// if (parent.getFirstChildElement().isOrHasChild(
// Element.as(eventTarget))) {
// use this to get the selected element!!
Element el = Element.as(eventTarget);
// check if we really click on the image
if (el.getTagName().equalsIgnoreCase("button")) {
for(Action action:value){
if(el.getAttribute("id").equals(action.getId())){
action.setClicked(true);
}
}
doAction(value,
valueUpdater);
}
}
}
}
在值更新程序内部,根据单击的状态,调用操作对象单击处理程序方法。
答案 2 :(得分:0)
public static Column<VolunteerTO, VolunteerTO> createReissueButtonColumn(String columnName) {
ActionCell<VolunteerTO> reListCell = new ActionCell<VolunteerTO>("Reissue", new ActionCell.Delegate<VolunteerTO>() {
@Override
public void execute(VolunteerTO object) {
// code to be executed
}
})
{
@Override
public void render(Cell.Context context,VolunteerTO value,SafeHtmlBuilder sb) {
if(null != value.getVolunteerStatus() && !"".equalsIgnoreCase(value.getVolunteerStatus())) {
super.render(context,value,sb);
}
}
};
Column<VolunteerTO, VolunteerTO> reListColumn = new Column<VolunteerTO, VolunteerTO>(reListCell) {
@Override
public VolunteerTO getValue(VolunteerTO object) {
return object;
}
public String getCellStyleNames(Cell.Context context, VolunteerTO object) {
if(object.getVolunteerStatus().equalsIgnoreCase(GatesClientConstants.ISSUED)|| object.getVolunteerStatus().equalsIgnoreCase(GatesClientConstants.PROTECTED)){
return "myButtonStyle";
}else if(object.getVolunteerStatus().equalsIgnoreCase(GatesClientConstants.ACCEPTED)|| object.getVolunteerStatus().equalsIgnoreCase(GatesClientConstants.RELEASED)){
return "btn_disable";
}
return "leftalign";
}
};
reListColumn.setDataStoreName(columnName);
reListColumn.setSortable(false);
return reListColumn;
}