2011-12-30 62 views
0

我想處理在我的應用程序中拖動超鏈接&。超鏈接可以來自任何地方,因此我不能讓它setDragable(true)setData("link", "the URL")來標記它。如何處理GWT中超鏈接的拖放

一個非常類似的情況是Google圖片按圖片搜索,您可以拖動&將圖片鏈接拖放到搜索框中。

的示例代碼,

 
Label lblDropLink = new Label("Drop a link here"); 
lblDropLink.addDragOverHandler(new DragOverHandler() { 

    @Override 
    public void onDragOver(DragOverEvent event) { 
     lblDropLink.setText("Drop here to add the link."); 
     lblDropLink.setStyleName("dragOverFade"); 
    } 
}); 
lblDropLink.addDropHandler(new DropHandler() { 

    @Override 
    public void onDrop(DropEvent event) { 
     event.preventDefault(); 

     // QUESTION: how to get the link, and even its text? 
    } 
}); 

謝謝!

回答

0

刪除一個鏈接時,你可以得到的唯一的事情就是網址!

你可以通過調用event.getData(format)方法得到它。

format可以是「text」或「url」(請參閱​​dom-datatransfer-getdata)。測試時,「文本」和「網址」始終提供相同的結果。

所以你需要的代碼在「//問題:如何獲得鏈接,甚至是它的文本?」是兩個

  • event.getData( 「文本」)
  • event.getData( 「URL」)

這裏是一個小樣本prgramm之一:

final Label lblDropLink = new Label(defaultText); 
    lblDropLink.addDragOverHandler(new DragOverHandler() { 

     @Override 
     public void onDragOver(DragOverEvent event) { 
      lblDropLink.setText(dragOverText); 
     } 
    }); 

    lblDropLink.addDropHandler(new DropHandler() { 

     @Override 
     public void onDrop(DropEvent event) { 
      event.preventDefault(); 

      RootPanel.get().add(new Label("Dropped source formated with \"text\": " + event.getData("text"))); 
      RootPanel.get().add(new Label("Dropped source formated with \"url\": " + event.getData("url"))); 
     } 
    }); 

    RootPanel.get().add(lblDropLink); 
} 

這應該是所有...

+0

謝謝@斯特凡。這適用於獲取URL。但是,event.getData(「text」)也返回URL而不是文本。任何方式來改變這一點? – ShuaiYuan 2012-01-05 15:54:51

+0

對不起,找不到原因,但有同樣的問題。正如我所看到的,當拖動一個鏈接時,只有網址在拖動信息中。另外,我找不到其他字段在格式中定義(該格式基本上指向了一個鍵值對... = – Stefan 2012-01-05 16:33:57

+0

我認爲這就是標準的實現方式,也許以後主流的瀏覽器會同時支持__text__和__url__,你現在的回答已經足夠好了,再次感謝@Stefan – ShuaiYuan 2012-01-05 17:58:42

0

有一個叫做getSource()的功能。使用它來投射拖動對象的源代碼並獲取onDrop事件中源對象的鏈接屬性。

實施例:

public void onDrop(DropEvent event) { 
    event.preventDefault(); 
    Link link = (Link)event.getSource(); 
} 

Link是被拖動的對象。那麼你可以撥打Link.getLink()或任何你用來獲得鏈接的價值。

Hpope你得到的概念:)

+0

不正確。如果你嘗試調試event.getSource(),你會發現它實際上是Label對象,而不是「鏈接」。 – ShuaiYuan 2012-01-03 15:53:21

+0

檢查此鏈接:http://forums.smartclient.com/showthread.php?t=3432 – 2012-01-03 16:03:24