我一直在努力讓拖放工作在GWT中。最近3天,我試圖創建一個基本的拖放應用程序並失敗。目前我可以拖動它,但我無法放到任何位置。使用gwt拖放GWT使用gnd dnd
我們該如何解決?我們是否需要修改onDragEnd - 我的印象是,除非我特別需要做點什麼,否則我不需要?我很困惑。
另外,如何限制掉落到任何一個區域?我明白我們可以使用DropController來完成它。但是我已經使用UiBinder定義了面板,那麼如何讓該面板返回到DropController中的鏈接?即RootPanel.get()爲我提供了基本的根面板,而不是我想要的實際面板。我試過RootPanel.get(「field-id」),但是即使該ID可用也顯示爲空。我究竟做錯了什麼?
我寫的代碼如下:
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());
}
}
和パUiBinder的如下所示:
<g:AbsolutePanel ui:field="absolutePanel" styleName="{style.panel}">
</g:AbsolutePanel>
如果有人能幫助我,我會很多謝。
ķ
PS:爲了解釋更多:我能夠通過更新onDragEnd爲以下解決的第一個問題:
@Override
public void onDragEnd(DragEndEvent event) {
DragContext context = event.getContext();
RootPanel.get().add(context.draggable, context.desiredDraggableX, context.desiredDraggableY);
}
,但是,我不知道這是否是正確的解決方案 - 因爲我認爲我不應該自己做定位。