【问题标题】:GWT Create column with custom cell typeGWT 使用自定义单元格类型创建列
【发布时间】:2016-01-26 20:21:03
【问题描述】:

我正在尝试在我的项目中使用来自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 或更改“单元格”的类型。

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

【问题讨论】:

  • 你为什么不想SeoClickableCell implements CellAbstractCell 的层次结构是什么?
  • 因为如果我创建 public class SeoClickableCell extends AbstractCell&lt;WebmasterObject&gt; implements Cell&lt;String&gt; { ,Java 会告诉我不能多次实现接口 Cell。如果我让他们两个都实现 X 没有发现错误,但是我应该让我的原始代码类似于Column&lt;WebmasterObject, WebmasterObject&gt; nameColumn = new Column&lt;WebmasterObject, WebmasterObject&gt;(cell) { 我不确定这是否是我需要的。
  • 这很奇怪,因为AbstractCell 实现了Cell...您使用的是哪个版本的 GWT?
  • @philfr49 那是因为 OP 现在正在尝试扩展 AbstractCell 实现 Cell 这不起作用。要么是要么。
  • @philfr49 我正在使用 GWT 2.6.0。是的,AbstractCell 的标题是public abstract class AbstractCell&lt;C&gt; implements Cell&lt;C&gt;,所以我知道我不应该让我的类实现 Cell,因为它已经实现了。我现在的问题是如何使用该类制作自定义列。

标签: java gwt celltable


【解决方案1】:

我解决了它,将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();
        }
    };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    相关资源
    最近更新 更多