Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将单击处理程序添加到Celltable ImageCell?_Java_Gwt - Fatal编程技术网

Java 如何将单击处理程序添加到Celltable ImageCell?

Java 如何将单击处理程序添加到Celltable ImageCell?,java,gwt,Java,Gwt,如何将单击处理程序添加到ImageCell? 这就是我所拥有的: ImageCell btn= new ImageCell(); Column<Contact,String> column = new Column<Contact,String>(btn) { @Override public String getValue(Contact c) { return c.imageLocation; } }; column

如何将单击处理程序添加到
ImageCell
? 这就是我所拥有的:

ImageCell btn= new ImageCell();
Column<Contact,String> column = new Column<Contact,String>(btn) 
{
    @Override
    public String getValue(Contact c) 
    {
        return c.imageLocation;
    }
};
column.setFieldUpdater(new FieldUpdater<Contact,String>()
{
    public void update(int index, Contact c, String value) 
    {   
        Window.alert("clicked");
    }           
});
ImageCell btn=新的ImageCell();
列=新列(btn)
{
@凌驾
公共字符串getValue(联系c)
{
返回c.imageLocation;
}
};
column.setFieldUpdater(新的FieldUpdater()
{
公共无效更新(整数索引、联系人c、字符串值)
{   
窗口。警报(“单击”);
}           
});

也许这有帮助:。它不是单元格上的clickhandler,而是单元格表(或列表)上的clickhandler。哪个更有效。

我通过创建自己的ButtonCell类解决了这个问题。以下是我的代码:

import com.google.gwt.cell.client.AbstractSafeHtmlCell;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.text.shared.SafeHtmlRenderer;
import com.google.gwt.text.shared.SimpleSafeHtmlRenderer;

/**
 * A {@link Cell} used to render a button.
 */
public class ClickImage extends AbstractSafeHtmlCell<String> {

  /**
   * Construct a new ButtonCell that will use a {@link SimpleSafeHtmlRenderer}.
   */
  private String bgImage="";
  public ClickImage() 
  {
    this(SimpleSafeHtmlRenderer.getInstance());
  }
  public ClickImage(String bgImage) 
  {
    this(SimpleSafeHtmlRenderer.getInstance());
    this.bgImage=bgImage;
  }

  public String getBgImage() 
  {
    return bgImage;
  }
  public void setBgImage(String bgImage) 
  {
    this.bgImage = bgImage;
  }
/**
   * Construct a new ButtonCell that will use a given {@link SafeHtmlRenderer}.
   * 
   * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
   */
  public ClickImage(SafeHtmlRenderer<String> renderer) {
    super(renderer, "click", "keydown");
  }

  @Override
  public void onBrowserEvent(Context context, Element parent, String value,
      NativeEvent event, ValueUpdater<String> valueUpdater) {
    super.onBrowserEvent(context, parent, value, event, valueUpdater);
    if ("click".equals(event.getType())) {
      onEnterKeyDown(context, parent, value, event, valueUpdater);
    }
  }

  @Override
  public void render(Context context, SafeHtml data, SafeHtmlBuilder sb) 
  {
    String img=getBgImage();
    String disableButton="";
    if(img.equals("transparentButton"))
    {
        disableButton = "disabled=\"disabled\"";
    }
    sb.appendHtmlConstant("<button class=\""+img+"\" type=\"button\" "+disableButton+" tabindex=\"-1\">");
    if (data != null) {
      sb.append(data);
    }
    sb.appendHtmlConstant("</button>");
  }

  @Override
  protected void onEnterKeyDown(Context context, Element parent, String value,
      NativeEvent event, ValueUpdater<String> valueUpdater) {
    if (valueUpdater != null) {
      valueUpdater.update(value);
    }
  }
}
import com.google.gwt.cell.client.AbstractSafeThmlCell;
导入com.google.gwt.cell.client.ValueUpdater;
导入com.google.gwt.dom.client.Element;
导入com.google.gwt.dom.client.NativeEvent;
导入com.google.gwt.safehtml.shared.safehtml;
导入com.google.gwt.safehtml.shared.SafeHtmlBuilder;
导入com.google.gwt.text.shared.SafeHtmlRenderer;
导入com.google.gwt.text.shared.SimpleSafeHtmlRenderer;
/**
*用于呈现按钮的{@link Cell}。
*/
公共类ClickImage扩展了AbstractSafeThmlCell{
/**
*构造一个将使用{@link SimpleSafeHtmlRenderer}的新ButtonCell。
*/
私有字符串bgImage=“”;
公共ClickImage()
{
这是(SimpleSafeHtmlRenderer.getInstance());
}
公共ClickImage(字符串bgImage)
{
这是(SimpleSafeHtmlRenderer.getInstance());
this.bgImage=bgImage;
}
公共字符串getBgImage()
{
返回图像;
}
公共图像(字符串bgImage)
{
this.bgImage=bgImage;
}
/**
*构造一个将使用给定{@link SafeHtmlRenderer}的新ButtonCell。
* 
*@param呈现程序{@link SafeHtmlRenderer SafeHtmlRenderer}实例
*/
公共单击图像(安全HTMLRenderer渲染器){
超级(渲染器,“单击”、“向下键”);
}
@凌驾
public void onBrowserEvent(上下文上下文、元素父级、字符串值、,
NativeEvent事件,ValueUpdater(ValueUpdater){
onBrowserEvent(上下文、父级、值、事件、值更新程序);
如果(“单击“.equals(event.getType())){
onEnterKeyDown(上下文、父级、值、事件、值更新程序);
}
}
@凌驾
公共void呈现(上下文上下文、安全HTML数据、安全HTMLBuilder sb)
{
字符串img=getBgImage();
字符串禁用按钮=”;
if(img.equals(“透明按钮”))
{
disableButton=“disabled=\”disabled\”;
}
某人以““””号结尾;
如果(数据!=null){
附加(数据);
}
某人以““””号结尾;
}
@凌驾
受保护的void onEnterKeyDown(上下文上下文、元素父元素、字符串值、,
NativeEvent事件,ValueUpdater(ValueUpdater){
if(valueUpdater!=null){
valueUpdater.update(值);
}
}
}
所以我用一个按钮来显示图像。我使用css使按钮的背景色透明,并且在创建按钮时,我将图像链接作为参数传递给构造函数,这样我可以创建不同的可单击图像。这对我有用

这同样有效

// clickable imageresource cell
public class ClickableImageResourceCell extends AbstractCell<ImageResource> {
    private static ImageResourceRenderer renderer;

    public ClickableImageResourceCell () {
        super(BrowserEvents.CLICK);
        if (renderer == null) {
            renderer = new ImageResourceRenderer();
        }
    }

    @Override
    public void onBrowserEvent(Context context, final Element parent, ImageResource value, NativeEvent event,
            ValueUpdater<ImageResource> valueUpdater) {
        super.onBrowserEvent(context, parent, value, event, valueUpdater);
        if (BrowserEvents.CLICK.equals(event.getType())) {
            onEnterKeyDown(context, parent, value, event, valueUpdater);
        }
    }

    @Override
    public void render(com.google.gwt.cell.client.Cell.Context context,
            ImageResource value, final SafeHtmlBuilder sb) {
          sb.append(renderer.render(value));
    }

    @Override
    protected void onEnterKeyDown(Context context, Element parent, ImageResource value, NativeEvent event,
            ValueUpdater<ImageResource> valueUpdater) {
        if (valueUpdater != null) {
            valueUpdater.update(value);
        }
    }
}
//可单击的imageresource单元格
公共类ClickableImageResourceCell扩展了AbstractCell{
私有静态图像渲染器;
公共ClickableImageResourceCell(){
超级(BrowserEvents.CLICK);
if(渲染器==null){
renderer=新的ImageResourceRenderer();
}
}
@凌驾
public void onBrowserEvent(上下文上下文、最终元素父级、ImageResource值、NativeEvent事件、,
ValueUpdater(ValueUpdater){
onBrowserEvent(上下文、父级、值、事件、值更新程序);
if(BrowserEvents.CLICK.equals(event.getType())){
onEnterKeyDown(上下文、父级、值、事件、值更新程序);
}
}
@凌驾
public void render(com.google.gwt.cell.client.cell.Context),
ImageResource值,最终安全HtmlBuilder sb){
sb.append(renderer.render(value));
}
@凌驾
受保护的void onEnterKeyDown(上下文上下文、元素父级、ImageResource值、NativeEvent事件、,
ValueUpdater(ValueUpdater){
if(valueUpdater!=null){
valueUpdater.update(值);
}
}
}
addButtonCell(“参考资料/ui/images/download.png”、“下载”、“下载”)

私有void addButtonCell(最终字符串imageSrc、字符串columnName、最终字符串操作)

{
ActionCell imageButtonCell=new ActionCell(“,new Delegate()
{
@凌驾
public void execute(对象的最终附件)
{
if(action.equalsIgnoreCase(“下载”))
{
下载(对象);
}
其他的
{
fireEvent(新的ImgButtonClickEvent(对象));
}
}
})
{
@凌驾
公共void呈现(上下文上下文,附加到值,SafeHtmlBuilder sb)
{
图像图标=新图像(imageSrc);
SafeHtmlBuilder=新的SafeHtmlBuilder();
builder.appendHtmlConstant(icon.toString());
sb.append(builder.toSafeHtml());
}
};
最终列=新列(imageButtonCell)
{
@凌驾
getValue的公共附件(AttachmentDTO对象)
{
返回对象;
}
};
cellTable.addColumn(column,columnName);
column.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
cellTable.setColumnWidth(列,“80px”);
}

我通过创建自己的buttoncell类解决了这个问题。我会尽快发布答案。。显然,如果你的分数低于100分,你不能在8小时内回答自己的问题
{
    ActionCell<AttachmentDTO> imageButtonCell = new ActionCell<AttachmentDTO>("", new Delegate<AttachmentDTO>()
        {
           @Override
           public void execute(final AttachmentDTO object)
           {
               if(action.equalsIgnoreCase("download"))
               {
                   download(object);
               }
               else
               {
                   eventBus.fireEvent(new ImgButtonClickEvent(object));
               }
           }
        })
        {
           @Override
           public void render(Context context, AttachmentDTO value, SafeHtmlBuilder sb)
           {
                 Image icon = new Image(imageSrc);
                 SafeHtmlBuilder builder = new SafeHtmlBuilder();
                 builder.appendHtmlConstant(icon.toString());
                 sb.append(builder.toSafeHtml());
           }
        };
    final Column<AttachmentDTO, AttachmentDTO> column = new Column<AttachmentDTO, AttachmentDTO>(imageButtonCell) 
       {
            @Override
            public AttachmentDTO getValue(AttachmentDTO object) 
            {
                return object;
            }
       };
    cellTable.addColumn(column, columnName); 
    column.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
    cellTable.setColumnWidth(column, "80px");   
}