我已经研究这个问题一段时间了,但一直无法解决。我有一个带有字段类型图标的列表网格。 我想将光标更改为"交接"图标。
我一直在网上搜索,看到存在一些解决方案。其中之一是将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);