我正在关注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)。
答案 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
。