通用拖放
Generic Drag and Drop
我正在尝试使用其中包含 Vaadin 图表的多个 div 制作视图,并使用 DnD 移动它们。我关注了this tutorial。这是我的 class 扩展 Div.
List<Div> divs = new ArrayList<>();
divs.add(new Bubble());
divs.add(new FunnelChart());
divs.add(new ColumnLineAndPie());
divs.add(new PieWithLegend());
divs.add(new Bubble());
divs.add(new FunnelChart());
divs.add(new ColumnLineAndPie());
divs.add(new PieWithLegend());
List<DragSource<Div>> cards = new ArrayList<>();
for (int i = 0; i < 8; i++) {
DragSource<Div> temp = DragSource.create(divs.get(i));
cards.add(temp);
cards.get(i).setDragData(true);
}
VerticalLayout board = new VerticalLayout();
HorizontalLayout row1 = new HorizontalLayout();
row1.setWidthFull();
row1.add(divs.get(0), divs.get(1), divs.get(3));
HorizontalLayout row2 = new HorizontalLayout();
row2.setWidthFull();
row2.add(divs.get(4));
HorizontalLayout row3 = new HorizontalLayout();
row3.setWidthFull();
row3.add(divs.get(5), divs.get(7));
board.add(row1, row2, row3);
add(board);
但不知何故,我无法拖动我的元素。
在您的示例中,拖动处于活动状态,只是不会掉落到任何地方。除非你不想要在容器中拾取和放置样式的拖动,而是像 window 那样的拖动(可移动)。在那种情况下,为什么不使用经过调整的 Vaadin 对话框?
更新 #1:
所以在这个例子中似乎是:
List<Div> divs = new ArrayList<>();
divs.add(new Div(new Bubble()));
divs.add(new FunnelChart());
divs.add(new PieWithLegend());
divs.add(new Bubble());
divs.add(new FunnelChart());
divs.add(new PieWithLegend());
divs.add(new Div(new Span("AAAAAA")));
divs.add(new Div(new Span("BBBBBB")));
divs.add(new Div(new Span("CCCCCC")));
divs.add(new Div(new Span("DDDDDD")));
divs.add(new Div(new Span("EEEEEE")));
divs.add(new Div(new Span("FFFFFF")));
List<DragSource<Div>> cards = new ArrayList<>();
for (int i = 0; i < divs.size(); i++) {
DragSource<Div> temp = DragSource.create(divs.get(i));
cards.add(temp);
cards.get(i).setDragData(true);
}
VerticalLayout board = new VerticalLayout();
HorizontalLayout row1 = new HorizontalLayout();
row1.setWidthFull();
row1.add(divs.get(0), divs.get(1), divs.get(3));
HorizontalLayout row2 = new HorizontalLayout();
row2.setWidthFull();
row2.add(divs.get(4));
row2.add(divs.get(5));
row2.add(divs.get(6));
HorizontalLayout row3 = new HorizontalLayout();
row3.setWidthFull();
row3.add(divs.get(7));
row3.add(divs.get(8));
row3.add(divs.get(9));
board.add(row1, row2, row3);
add(board);
add(new Div(new Span("NOOOOOOOO")));
只有 NOOOOOOO div 不可拖动。图表看起来不太好,但是如果您添加 padding: 100px,例如,然后将它们拖到框架旁边,它就可以工作。所以我会说问题在于你放入其中的内容。图表是复杂的组件,在某些情况下也可以拖动。它们可能需要进行调整,但我认为这不是一件容易的事。也许最好的方法是创建一个 'picking' 区域,您可以在其中抓取卡片。
我正在尝试使用其中包含 Vaadin 图表的多个 div 制作视图,并使用 DnD 移动它们。我关注了this tutorial。这是我的 class 扩展 Div.
List<Div> divs = new ArrayList<>();
divs.add(new Bubble());
divs.add(new FunnelChart());
divs.add(new ColumnLineAndPie());
divs.add(new PieWithLegend());
divs.add(new Bubble());
divs.add(new FunnelChart());
divs.add(new ColumnLineAndPie());
divs.add(new PieWithLegend());
List<DragSource<Div>> cards = new ArrayList<>();
for (int i = 0; i < 8; i++) {
DragSource<Div> temp = DragSource.create(divs.get(i));
cards.add(temp);
cards.get(i).setDragData(true);
}
VerticalLayout board = new VerticalLayout();
HorizontalLayout row1 = new HorizontalLayout();
row1.setWidthFull();
row1.add(divs.get(0), divs.get(1), divs.get(3));
HorizontalLayout row2 = new HorizontalLayout();
row2.setWidthFull();
row2.add(divs.get(4));
HorizontalLayout row3 = new HorizontalLayout();
row3.setWidthFull();
row3.add(divs.get(5), divs.get(7));
board.add(row1, row2, row3);
add(board);
但不知何故,我无法拖动我的元素。
在您的示例中,拖动处于活动状态,只是不会掉落到任何地方。除非你不想要在容器中拾取和放置样式的拖动,而是像 window 那样的拖动(可移动)。在那种情况下,为什么不使用经过调整的 Vaadin 对话框?
更新 #1: 所以在这个例子中似乎是:
List<Div> divs = new ArrayList<>();
divs.add(new Div(new Bubble()));
divs.add(new FunnelChart());
divs.add(new PieWithLegend());
divs.add(new Bubble());
divs.add(new FunnelChart());
divs.add(new PieWithLegend());
divs.add(new Div(new Span("AAAAAA")));
divs.add(new Div(new Span("BBBBBB")));
divs.add(new Div(new Span("CCCCCC")));
divs.add(new Div(new Span("DDDDDD")));
divs.add(new Div(new Span("EEEEEE")));
divs.add(new Div(new Span("FFFFFF")));
List<DragSource<Div>> cards = new ArrayList<>();
for (int i = 0; i < divs.size(); i++) {
DragSource<Div> temp = DragSource.create(divs.get(i));
cards.add(temp);
cards.get(i).setDragData(true);
}
VerticalLayout board = new VerticalLayout();
HorizontalLayout row1 = new HorizontalLayout();
row1.setWidthFull();
row1.add(divs.get(0), divs.get(1), divs.get(3));
HorizontalLayout row2 = new HorizontalLayout();
row2.setWidthFull();
row2.add(divs.get(4));
row2.add(divs.get(5));
row2.add(divs.get(6));
HorizontalLayout row3 = new HorizontalLayout();
row3.setWidthFull();
row3.add(divs.get(7));
row3.add(divs.get(8));
row3.add(divs.get(9));
board.add(row1, row2, row3);
add(board);
add(new Div(new Span("NOOOOOOOO")));
只有 NOOOOOOO div 不可拖动。图表看起来不太好,但是如果您添加 padding: 100px,例如,然后将它们拖到框架旁边,它就可以工作。所以我会说问题在于你放入其中的内容。图表是复杂的组件,在某些情况下也可以拖动。它们可能需要进行调整,但我认为这不是一件容易的事。也许最好的方法是创建一个 'picking' 区域,您可以在其中抓取卡片。