2011-12-30 60 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