1

わかりました、たとえば、ラベルがあり、VerticalPanel多くのラベルが付いている があります。このコードを参照してください:

// Make the widget draggable.
Label w = new Label("OutSide Label");
w.getElement().setDraggable(Element.DRAGGABLE_TRUE);

// Add a DragStartHandler.
w.addDragStartHandler(new DragStartHandler() {
  @Override
  public void onDragStart(DragStartEvent event) {
    // Required: set data for the event.
    event.setData("text", "Hello World");
    // Optional: show a copy of the widget under cursor.
    event.getDataTransfer().setDragImage(w.getElement(), 10, 10);
  }
});

VerticalPanel vp=nw VerticalPanel();
vp.add(new Label("l1");
vp.add(new Label("l2"); 
vp.add(new Label("l3"); 

vp.addDomHandler(new DragOverHandler() {
  public void onDragOver(DragOverEvent event) {
    vp.getElement().getStyle().setBackgroundColor("#ffa");
  }
}, com.google.gwt.event.dom.client.DragOverEvent.getType());

vp.addDomHandler(new DropHandler() {            
  @Override
  public void onDrop(com.google.gwt.event.dom.client.DropEvent event) {
    // TODO Auto-generated method stub
    event.preventDefault();
    // Get the data out of the event.
    String data = event.getData("text");
    //Window.alert(data);
    /// WE NEED TO FILL IN THE MISSING CODE HERE
    /// WE NEED TO FILL IN THE MISSING CODE HERE
  }
}, DropEvent.getType());

ユーザーが外側のラベルを の領域にドラッグすると、外側のラベルが既存のウィジェット間でドラッグされた場合、外側のラベルが "l1" の間でドラッグされた場合、VerticalPanel上の既存のラベルの間に挿入されるようにコーディングする方法VerticalPanel& "l2" の場合、次のvpように表示されます:
l1
OutSide Label
l2
l3

4

1 に答える 1

3

次のようなものは、テストされていませんが、理論的には機能するはずです。

p.addDomHandler(new DropHandler() {
  @Override
  public void onDrop(DropEvent event) {
    // Get the target event.
    EventTarget eventTarget = event.getNativeEvent().getEventTarget();
    // Safe check for casting to Element.
    if (Element.is(eventTarget)) {
      Element elementTarget = Element.as(eventTarget);
      // Loop through VerticalPanel's children to find our target.
      for (int i = 0; i < p.getWidgetCount(); ++i) {
        if (p.getWidget(i).getElement().isOrHasChild(elementTarget)) {
          // Insert a new Label with the DataTransfer's data,
          // and remove the old one.
          p.insert(new Label(event.getData("text")), i);
          oldLabelContainer.remove(oldLabel);
          break;
        }
      }
    }
  }
}, DropEvent.getType());

もちろん、ループするラベルがたくさんある場合は避けるべきです。

于 2013-04-29T09:51:28.350 に答える