如何再次从DragAndDropWrapper中获取组件

时间:2015-07-23 14:32:36

标签: drag-and-drop components vaadin

我正在关注this guide,以便为我的拖放方案实现解决方案。基本上我有一个包含在“Slider”中的组件(DragAndDropWrapper)。这非常有效。

                final Slider slider = new Slider(title);
                slider.setValue(1.0);
                slider.setWidth("100%");
                slider.setMax(4);
                slider.addStyleName("ticks");

                final DragAndDropWrapper sliderWrap = new DragAndDropWrapper(slider);
                sliderWrap.setDragStartMode(DragStartMode.COMPONENT);
                sliderWrap.setSizeUndefined();
                ((AbstractOrderedLayout) this.getContent()).addComponent(sliderWrap);

好的,为了简化事情,我们假设我们有一个button包裹在这样的DragAndDropWrapper中。

final Button button = new Button("An Absolute Button");

final DragAndDropWrapper buttonWrap = new DragAndDropWrapper(button);
buttonWrap.setDragStartMode(DragStartMode.COMPONENT);

我怎么能再次把按钮拿出来?我正在寻找这样的东西:

Button myButton = buttonWrap.getComponent(0);

API未说明任何可用于执行此操作的方法(AFAIK)。

1 个答案:

答案 0 :(得分:1)

使用getCompositionRoot method。不幸的是,此方法受到保护,因此您需要扩展DragAndDropWrapper并更改方法可见性。例如:

public class MyDragAndDropWrapper extends DragAndDropWrapper
{
    public MyDragAndDropWrapper(Grid grid)
    {
        super(grid);
    }

    @Override
    public Component getCompositionRoot(){
        return super.getCompositionRoot();
    }
}
//...later on
Grid grid = new Grid(container);
grid.setId("fancyId");
MyDragAndDropWrapper w  = new MyDragAndDropWrapper(grid);
System.out.println(w.getCompositionRoot().getId());
layout.addComponent(w);

请注意,您始终可以将上述代码中的变量w声明为原始DragAndDropWrapper,并通过投放访问getCompositionRoot