GWT でドラッグ アンド ドロップを機能させるのに本当に苦労しています。過去 3 日間、基本的なドラッグ アンド ドロップ アプリケーションを作成しようとして失敗しました。現在、ドラッグすることはできますが、どこにもドロップできません。
どうすれば解決できますか?onDragEnd を変更する必要がありますか?特に何かをする必要がない限り、変更する必要はないという印象を受けましたか? 私はかなり混乱しています。
また、ドロップを特定のエリアに制限するにはどうすればよいですか? DropController を使用して実行できることは理解しています。しかし、UiBinder を使用してパネルを定義したので、そのパネルを DropController でリンクするように戻すにはどうすればよいですか? つまり、RootPanel.get() は、必要な実際のパネルではなく、基本的なルート パネルを提供します。RootPanel.get("field-id") を試しましたが、その ID が使用可能であっても null が表示されます。私は何を間違っていますか?
私が書いたコードは次のとおりです。
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());
}
}
testpanel uibinder は次のようになります。
<g:AbsolutePanel ui:field="absolutePanel" styleName="{style.panel}">
</g:AbsolutePanel>
誰かが私を助けることができれば、私は非常に義務付けられます.
K
PS: 詳細を説明するには: onDragEnd を次のように更新することで、最初の質問を解決できました。
@Override
public void onDragEnd(DragEndEvent event) {
DragContext context = event.getContext();
RootPanel.get().add(context.draggable, context.desiredDraggableX, context.desiredDraggableY);
}
しかし、これが正しい解決策であるかどうかはわかりません。自分でポジショニングを行うべきではないと思うからです。