使用GWT dnd在GWT中拖放
我一直在努力在GWT工作。过去3天,我试图创建一个基本的拖放应用程序,但失败了。目前我可以把它拖来拖去,但我不能拖到任何地方使用GWT dnd在GWT中拖放,gwt,uibinder,drag-and-drop,flowpanel,Gwt,Uibinder,Drag And Drop,Flowpanel,我一直在努力在GWT工作。过去3天,我试图创建一个基本的拖放应用程序,但失败了。目前我可以把它拖来拖去,但我不能拖到任何地方 我们如何解决这个问题?我们需要修改onDragEnd吗?我的印象是,除非我特别需要做什么,否则我不需要做什么?我很困惑 另外,如何将下降限制在任何单个区域?我知道我们可以用DropController来做。但是我已经使用UiBinder定义了面板,那么如何将该面板恢复到DropController中的链接?i、 get()提供了基本的根面板,而不是我想要的实际面板。我尝试
public class TestPanel extends Composite implements
DragHandler, HasMouseDownHandlers, HasMouseUpHandlers, HasMouseMoveHandlers, HasMouseOutHandlers {
interface Binder extends UiBinder<Widget, TestPanel> { }
private static final Binder binder = GWT.create(Binder.class);
@UiField AbsolutePanel absolutePanel;
private PickupDragController TestDragController;
private Image img = new Image("./testicon.png");
public TestPanel(){
initWidget(binder.createAndBindUi(this));
absolutePanel.add(img);
TestDragController = new PickupDragController(RootPanel.get(), false);
AbsolutePositionDropController dropController = new AbsolutePositionDropController(
RootPanel.get());
TestDragController.registerDropController(dropController);
TestDragController.addDragHandler(this);
TestDragController.makeDraggable(this, getDragHandle());
}
private Widget getDragHandle() {
return img;
}
@Override
public void onDragEnd(DragEndEvent event) { }
@Override
public void onDragStart(DragStartEvent event) { }
@Override
public void onPreviewDragEnd(DragEndEvent event) throws VetoDragException { }
@Override
public void onPreviewDragStart(DragStartEvent event) throws VetoDragException { }
@Override
public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) {
return addDomHandler(handler, MouseDownEvent.getType());
}
@Override
public HandlerRegistration addMouseUpHandler(MouseUpHandler handler) {
return addDomHandler(handler, MouseUpEvent.getType());
}
@Override
public HandlerRegistration addMouseMoveHandler(MouseMoveHandler handler) {
return addDomHandler(handler, MouseMoveEvent.getType());
}
@Override
public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) {
return addDomHandler(handler, MouseOutEvent.getType());
}
}
但是,我不确定这是否是正确的解决方案——因为我认为我不应该自己做定位 如果您是GWT dnd的新手,为什么不试试这个 有很多例子,所有的源代码都是可用的
(不,您不应该自己进行定位)您必须在放置目标上添加DragOverHandler:即使它什么也不做,它也会将组件定义为放置目标 当然,您仍然需要在这个组件上定义DropHandler(通常还可以选择使用DragEnterHandler和DragLeaveHandler进行视觉反馈) 即使未到达目标(在非拖放区域中放弃拖动),也会调用DragEndHandler,它用于更改被拖动对象的状态,您可能需要设置DropHandler与DragEndHandler(共享变量、EventBus等)通信拖放成功的方法
<g:AbsolutePanel ui:field="absolutePanel" styleName="{style.panel}">
</g:AbsolutePanel>
@Override
public void onDragEnd(DragEndEvent event) {
DragContext context = event.getContext();
RootPanel.get().add(context.draggable, context.desiredDraggableX, context.desiredDraggableY);
}