GWT使用自定义单元格类型创建列

时间:2015-10-27 12:11:44

标签: java gwt celltable

我试图在我的项目中使用https://stackoverflow.com/a/6966235/1339354中的代码。我定义了以下类:

public class SeoClickableCell extends AbstractCell<WebmasterObject> {

public SeoClickableCell() {
    super("click", "keydown");
}

@Override
public void render(Context context, WebmasterObject value, SafeHtmlBuilder sb) {
     if (value != null) {
         sb.appendHtmlConstant("<a href='javascript:;'>");
         sb.appendEscaped(value.getName());
         sb.appendHtmlConstant("</a>");
     }
}

@Override
public void onBrowserEvent(Context context, Element parent, WebmasterObject value, NativeEvent event, ValueUpdater<WebmasterObject> valueUpdater) {
    if (value == null)
        return;

    super.onBrowserEvent(context, parent, value, event, valueUpdater);
    if ("click".equals(event.getType())) {
        //TODO
    }
}

};

但是我试图在我的CellTable中创建一个自定义列。但是以下代码:

final SeoClickableCell cell = new SeoClickableCell();
    Column<WebmasterObject, String> nameColumn = new Column<WebmasterObject, String>(cell) {
        @Override
        public String getValue(WebmasterObject WebmasterObject) {
            return WebmasterObject.getName();
        }
    };

告诉我:

  

构造函数Column(SeoClickableCell)未定义

我应该让SeoClickableCell实现Cell或更改&#34; cell&#34;的类型。

我不确定我是否正确掌握制作自定义单元格/列的过程,因此我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

我解决了将SeoClickableCell的类型和实现更改为:

public class SeoClickableCell extends AbstractCell<String> {

public SeoClickableCell() {
    super("click", "keydown");
}

@Override
public void render(com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb) {
     if (value != null) {
         sb.appendHtmlConstant("<a href='javascript:;'>");
         sb.appendEscaped(value);
         sb.appendHtmlConstant("</a>");
     }
}

@Override
public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) {
    if (value == null)
        return;

    super.onBrowserEvent(context, parent, value, event, valueUpdater);
    if ("click".equals(event.getType())) {
        //TODO
    }
}

};

并使列像这样:

final SeoClickableCell cell = new SeoClickableCell();
    Column<WebmasterObject, String> nameColumn = new Column<WebmasterObject, String>(cell) {
        @Override
        public String getValue(WebmasterObject wbo) {
            return wbo.getName();
        }
    };