2012-04-30 5 views
3

私はこの問題をかなり長い間解決してきましたが、解決できませんでした。 私はフィールドタイプのアイコンを持つリストグリッドを持っています。私は、アイコンを "手"にカーソルを変更したいと思います。smartgwt listgridがアイコンフィールドを渡すようにカーソルを設定

私はウェブを検索していて、いくつかの解決策が存在することを知りました。 リストグリッドにはaddCellOverHandlerが使用されています。しかし、私はあなたがリストグリッドの指定されたフィールドのカーソルをどのように変更できるのか分かりません。

this.addCellOverHandler(new CellOverHandler() { 

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

listgridで私のフィールドは次のように定義される:誰かがフォーラムで指摘のように、setCursor()方法は

...ではないフィールドに対してのみlistgridのために存在するが、

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

誰もが手掛かりを持っている場合... おかげ

答えて

1

は:

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

事がlistgridで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; 
} 

主要な放射性降下物は、事前に、フィールドの列番号を知っている必要があるということです は、ここで私が使用したコードです。

0

どの程度

いくつかのより多くの(より多くの...)グーグルでは、私はこれを見つけた後
grid.addCellOverHandler(new CellOverHandler() { 
    @Override 
    public void onCellOver(CellOverEvent event) { 
    //cellOver event to get field and refresh the cell 
    //grid.refreshCell(i, j); 
    } 
}); 
+0

しかし、あなたはそれの後にカーソルを設定することができるかどうかはわかりません。 –

+0

@ Hardik Mishra:私はグリッドのフィールドの値を変更したくないです。単にアイコンの上にカーソルを表示するだけです。 –

+0

@ Alain BUFERNE:私は同じアプローチを試みましたが、カーソルを変更することになると固執します... –

2

私のコメントとhereからの情報を追加すると、私はFirefox 5.0でSmartGwt2.4で動作する次のコードをテストしました。

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行でそれを見つけました。

+0

私はこの解決策を適用することができずにフォーラムに投稿しました。あなたのソリューションは動作しますが、それには2つの問題があります。1つは、グリッドの3番目の子を指定する必要がある場合、2番目のグリッドを指定する必要があるということです。私はなぜか分からない...第二の事は、私のアイコンフィールド上でポインタタイプに変わるカーソルの振る舞いですが、フィールドを離れると通常に戻るのに少し時間がかかります。私が見つけた私の解決策を編集し、よりうまく機能します。あなたの答えをお寄せいただきありがとうございました。 –

+0

子インデックスの場合、それは正常です。リストグリッドの設定によっては、いくつかの要素が存在する可能性があります。遅延時間については私もそれを見てきましたが、それが同じかどうかを見るために生産モードをチェックしませんでした。とにかくあなたのCSSスタイルの方法が良いです。 –

+0

自分の方法だけでなく、自分の方法も完璧ではないことが1つあります。フィールド内のアイコンだけでなく、フィールド全体にカーソルが移動します。だから、あなたのフィールドの大きさをアイコンに合う大きさにすればいいです。より大きなフィールドが必要な場合は、カーソルがどこにもポインタとして表示されないのはあまりありません。 –

0

here(「コメント/統計情報」フィールドの初期化方法をご覧ください)

要するに、ListGridを拡張してcreateRecordComponentメソッドをオーバーライドする必要があります。このメソッドでは、任意のカスタムコンポーネントを作成することができ、グリッドセルに表示されます。

またListGridがで初期化する必要があります(event.getColNum()== yourGrid.getFieldNum(「アイコン」))場合

listGrid.setShowRecordComponents(true); 
listGrid.setShowRecordComponentsByCell(true); 
関連する問題