【发布时间】:2013-03-11 16:35:12
【问题描述】:
我正在使用 GWT 2.5,我想在一个面板中制作一些图像,使其可拖放到另一个面板中。这在 Firefox 上运行良好,但在 IE9 上它就是不想工作。
我几乎整天都在搜索,但没有找到任何解决方案。我发现的最好的线程在这里:
GWT native drag & drop - DragStartEvent not firing on IE9
不同之处在于我拖动的是图像,而不是标签。所以这可能是问题所在。
所以代码看起来像这样:
// Draggable Image
final Image img = new Image(imageName);
img.addDragStartHandler(new DragStartHandler() {
@Override
public void onDragStart(final DragStartEvent event) {
event.setData("text", img.getUrl());
}
});
img.getElement().setDraggable(Element.DRAGGABLE_TRUE);
然后我把它放在我的“源”面板中:
// Image in the source container
wunschContainer = new AbsolutePanel();
img.setPixelSize(size, size);
wunschContainer.add(img, left, top);
图像显示正确(Firefox 和 IE9)
目标面板看起来像这样(它是 AbsolutePanel 的子类,实现了 HasDragOverHandlers 和 HasDropHandlers)
// Event-handlers for the target container.
this.addDragOverHandler(new DragOverHandler() {
@Override
public void onDragOver(final DragOverEvent event) {
}
});
this.addDropHandler(new DropHandler() {
@Override
public void onDrop(final DropEvent event) {
event.preventDefault();
final String data = event.getData("text");
/* ... some more handling ..., creates an image to be displayed here */
add(image, left, top);
}
});
在 Firefox 中,当我拖动图像时,拖动的图像会显示在鼠标指针下方。在 IE9 上,我根本看不到图像,只有一个符号(带有斜线的圆圈,这个“不允许”符号)。当我松开鼠标按钮时,什么也没有发生。我还用“F12”检查了我使用的是 IE9 模式,没有兼容模式。
我真的不知道问题是什么。代码似乎没问题(适用于 FF)。使用 GWT-Images 制作 DnD 是否有问题?有趣的是,“onDragStart()”方法被触发了。但是“拖动”并没有完成。
哦,我正在使用 GWT 开发模式来测试这个。这会是个问题吗?
我想只使用 GWT 来解决这个问题。或者我应该去使用另一个库,比如 gwt-dnd?有人在 IE9 上获得plain GWT DnD 吗?我不敢相信我是第一个尝试这样做的人:-(。
【问题讨论】:
-
您是否也尝试将图像包装在流程面板或标签中?
-
尝试在 FlowPanel 中进行包装。没有变化。
-
还尝试使用 AbsolutePanel 作为包装器。实际上没有办法用图像制作标签。我尝试不使用图像,仅使用标签。没有成功。
-
好吧,这真的很奇怪。我想强调一下,我正在使用 AbsolutePanel 作为目标,我实现了一些 DragNDrop 接口。我刚刚扩展了我的类,实现了 HasDragOverHandlers、HasDropHandlers、HasDragEnterHandlers、HasDragLeaveHandlers。所有处理程序都被触发(DragEnterHandler、DragLeaveHandler 和 DragOverHandler),但 DropHandler 没有。
标签: image internet-explorer gwt drag-and-drop