SmartGWT 列表网格 将光标设置为交接图标字段



我已经研究这个问题一段时间了,但一直无法解决。我有一个带有字段类型图标的列表网格。 我想将光标更改为"交接"图标。

我一直在网上搜索,看到存在一些解决方案。其中之一是将addCellOverHandler用于列表网格。 但是我不明白如何更改列表网格指定字段的光标。

this.addCellOverHandler(new CellOverHandler() {
    @Override
    public void onCellOver(CellOverEvent event) {
    // not able to get the field and setCursor()        
    }
});

我在列表网格中的字段定义为:

ListGridField iconField = new ListGridField("icon");
iconField.setAlign(Alignment.CENTER);
iconField.setType(ListGridFieldType.ICON);
iconField.setIcon("icons/icon.gif");

就像有人在论坛上指出的那样,列表网格存在一种setCursor()方法,但不仅仅是字段......

如果有人有线索...谢谢

经过更多(更多...)谷歌搜索,我发现了这个:

http://forums.smartclient.com/showthread.php?t=15748

问题是覆盖列表网格中的getCellStyle方法。这是我使用的代码:

@Override
protected String getCellStyle(ListGridRecord record, int rowNum, int colNum) {
    if (colNum==6){
        return "EC_pointer";
    }
    return super.getCellStyle(record, rowNum, colNum);
}

在我的 CSS 文件中:

.EC_pointer { 
    cursor: pointer; 
}

主要后果是您必须提前知道字段的列号。

根据我的评论并从这里添加信息,我测试了以下代码,该代码适用于Firefox 2.4下的SmartGwt5.0。

demandesGrid.setCanHover(true);
demandesGrid.setShowHover(false);
demandesGrid.addCellHoverHandler(new CellHoverHandler() {
    @Override
    public void onCellHover(CellHoverEvent event) {
        if (event.getColNum() == demandesGrid.getFieldNum("icon")) {
        //  SC.say(demandesGrid.getChildren()[3].toString());
            demandesGrid.getChildren()[3].setCursor(Cursor.POINTER);
        } else {
            demandesGrid.getChildren()[3].setCursor(Cursor.DEFAULT);
        }
    }
});

我不知道ListGridBody的索引是否恒定;我用SC.say行找到了它。

怎么样

grid.addCellOverHandler(new CellOverHandler() {
  @Override
  public void onCellOver(CellOverEvent event) {
    //cellOver event to get field and refresh the cell
    //grid.refreshCell(i, j);
  }
});

这里充分展示了最好的方法(看看"评论/统计"字段是如何初始化的)。

简而言之,您必须扩展ListGrid并覆盖createRecordComponent方法。在此方法中,您可以制作任何您喜欢的自定义组件,它将显示在网格单元格中。

此外,ListGrid 应初始化为:

listGrid.setShowRecordComponents(true);
listGrid.setShowRecordComponentsByCell(true);

最新更新