2011-01-15 11 views
1

こんにちは皆様 FlexTableには画像(各セルに1つ)が含まれています。私はあなたがマウスの上にマウスを動かすというイベントがあったなら、画像のタイトルを含むべきポップアップが出てきたらいいですね。 誰かが私に手を差し伸べることができますか?GWTのFlexTableのMouseOver

私はこのコードを挿入しようとしましたが(少なくとも私にとっては)何をしなければならないのですか?しかし、マウスポインタを削除するとポップアップはアクティブのままです。

private FlexTable createHTML(ImageResult result,int row,final int i,int currentCol) { 

immagine[i]=new Image(result.getThumbnailUrl()); 
resultsTableImm.setWidget(row, currentCol, immagine[i]); 
titleImm[i]=result.getTitleNoFormatting(); 
contentImm[i]=result.getContentNoFormatting(); 
urlImm[i]=result.getUnescapedUrl(); 

immagine[i].addMouseOverHandler(new MouseOverHandler() { 

     @Override 
     public void onMouseOver(MouseOverEvent event) { 

      PopupPanel p = new PopupPanel(true); 
      Widget source = (Widget) event.getSource(); 
      int x = source.getAbsoluteLeft() + 10; 
      int y = source.getAbsoluteTop() + 10; 
      p.add(new HTML("<b>"+titleImm[i]+"</b><br>"+contentImm[i])); 
      p.setPopupPosition(x, y); 
     p.show(); 
     } 
    }); 

    return resultsTableImm; 
      } 

はありがとうと良い一日を

JD

+0

どのようにイメージをFに追加していますかlexTable?いくつかのコードは良いだろう。 –

+0

Google Search APIクラスを使用して画像を挿入しています(画像がテーブルに挿入された結果が見つかった場合)。現時点では、私はGoogleのサーバーからダウンロードしたすべての画像を持つテーブルを持っています(4x8です)。私は画像の上にマウスを置くと、後者(GoogleImageのようなもの)のタイトルとURLを示すポップアップが開きます。 – JackDaniels

答えて

1

FlexTableがonMouseOverHandlerはしていませんが。それはclickHandlerしか持っていません。したがって、マウスオーバーハンドラーをテーブル(セル)に接続することはできません。一つの方法は、あなたがgwt2.1を使用している場合

Image image= new Image(); 
image.addMouseOverHandler(new MouseOverHandler() { 

     @Override 
     public void onMouseOver(MouseOverEvent event) { 
      PopupPanel p = new PopupPanel(true); 
      Widget source = (Widget) event.getSource(); 
      int x = source.getAbsoluteLeft() + 10; 
      int y = source.getAbsoluteTop() + 10; 

      p.add(image); 
      p.setPopupPosition(x, y); 
      p.show(); 
     } 
    }); 

が、私はあなたがXortyの例を煮詰め、この例ではCellTable

ルックCell Table

+0

CellTableを使用すると、各セルでMOを管理できますか? – JackDaniels

+0

もちろん、 –

+0

でもOKです。今私はCellTableで私のFlexTablesを変換する方法を把握しようとする必要があります。 – JackDaniels

0

あなたが登録したのonmouseoverハンドラとカスタムウィジェット作り、フレックステーブルにそれを置くことができます(アイデアは、セルのリスナーを追加しようとされていませんが、それはセルにあるウィジェット自体にあります)。

それとも、このような何か試すことができます。 http://www.java2s.com/Code/Java/GWT/TableMouseOverEvent.htm

0

を使用することをお勧めすることをpopuplikeに表示した画像にaddMouseOverHandlerです現在の質問の要点に、FlexTableの次の拡張を適用することができます:

import com.google.gwt.user.client.DOM; 
import com.google.gwt.user.client.Element; 
import com.google.gwt.user.client.Event; 
import com.google.gwt.user.client.ui.FlexTable; 

public class PTable extends FlexTable { 

    public static final String ROW_STYLE_NAME = "pm-PTable-row"; 

    PTable() { 
     setStyleName("pm-PTable"); 
     sinkEvents(Event.ONMOUSEOVER |Event.ONMOUSEOUT); 
    } 

    @Override 
    public void onBrowserEvent(Event event) { 
     super.onBrowserEvent(event); 
     Element td = getEventTargetCell(event); 
     if (td == null) return; 
     Element tr = DOM.getParent(td); 
     switch (DOM.eventGetType(event)) { 
      case Event.ONMOUSEOVER: { 
       tr.addClassName(ROW_STYLE_NAME + "-mouseover"); 
       break; 
      } 
      case Event.ONMOUSEOUT: { 
       tr.removeClassName(ROW_STYLE_NAME + "-mouseover"); 
       break; 
      } 
     } 
    } 
}