如何在VerticalPanel中的onPreviewDrop()中获取Widget的索引?

时间:2014-06-28 12:43:45

标签: java javascript html gwt drag-and-drop

我在这里使用示例:https://gwt-dnd.appspot.com/#InsertPanelExample只有一列。

该列是VerticalPanel,其中包含许多小部件。

使用VerticalPanelDropController我可以注册:

  @Override
  public void onDrop(DragContext context) {
    super.onDrop(context);
    final Widget widget = context.draggable;
    final int newIndex = columnPanel.getWidgetIndex(widget);
  }

  @Override
  public void onPreviewDrop(DragContext context) throws VetoDragException {
    super.onPreviewDrop(context);
    int newIndex = ???
  }

在onDrop()中我可以使用columnPanel.getWidgetIndex(widget)在columnPanel中获取窗口小部件的新位置,但是在onPreviewDrop()中我不能这样做,因为此时窗口小部件不在columnPanel内。

如何获取目标索引,其中放置的Widget应该放入onPreviewDrop()的columnPanel中?我想知道在插入小部件之前应该在哪里插入小部件。这样我可以取消插入。

2 个答案:

答案 0 :(得分:3)

以下内容仅在定位器窗口小部件与拖动行时占位符具有相同结构时才有效。

int newIndex = dropTarget.getWidgetIndex(newPositioner(context));

我使用以下代码来获取正确的索引:

   @Override
    public void onPreviewDrop(DragContext context)
        throws VetoDragException {
    super.onPreviewDrop(context);

    int newIndex = -1;
    String positionerClass = newPositioner(context).getElement()
        .getClassName();
    for (int i = 0; i < dropTarget.getWidgetCount(); i++) {
        String widgetClass = dropTarget.getWidget(i).getElement()
            .getClassName();
        if (widgetClass.equals(positionerClass)) {
        newIndex = i;
        }
    }
   };

答案 1 :(得分:1)

您需要致电

dropTarget.getWidgetIndex(newPositioner(context));
像这样:

@Override
public void onPreviewDrop(DragContext context) throws VetoDragException {
    super.onPreviewDrop(context);
    int newIndex = dropTarget.getWidgetIndex(newPositioner(context));
}