Как сделать содержимое диалога перетаскиваемым? ⇐ JAVA
-
Anonymous
Как сделать содержимое диалога перетаскиваемым?
Я хотел бы добавить сетку с перетаскиваемыми строками внутри диалогового окна в моем приложении Vaadin 24.
Однако диалоговое окно, похоже, не позволяет сеткам обнаруживать какие-либо действия по перетаскиванию.
Я попробовал добавить в сетки имя «перетаскиваемого» класса, как рекомендовано в документации, но действие перетаскивания по-прежнему не обнаружено ни в одном браузере. Я также пробовал добавить его в сам Div или в макет, в который этот Div добавлен, но это не работает.
Вот полная реализация сеток (этот код взят из примера Ваадина с перетаскиванием строк между сетками):
`публичный класс GridDragRowsBetweenGrids расширяет Div {
private TypeOperation draggedItem; общественный GridDragRowsBetweenGrids () { List люди = новый ArrayList(); пытаться { люди = TypeOperation.getTypeOperationsFromServer(); } catch (SQLException e) { // TODO Автоматически сгенерированный блок catch е.printStackTrace(); } ArrayList люди1 = новый ArrayList(люди); ArrayList люди2 = новый ArrayList(); Gridgrid1 = setupGrid(); Gridgrid2 = setupGrid(); GridListDataView dataView1 = Grid1.setItems(people1); GridListDataView dataView2 =grid2.setItems(people2); Grid1.setDropMode(GridDropMode.ON_GRID); Grid1.setRowsDraggable(истина); Grid1.addDragStartListener(this::handleDragStart); Grid1.addDropListener(e -> { dataView2.removeItem(draggedItem); dataView1.addItem(draggedItem); }); Grid1.addDragEndListener(this::handleDragEnd); Grid2.setDropMode(GridDropMode.ON_GRID); Grid2.setRowsDraggable(истина); Grid2.addDragStartListener(this::handleDragStart); Grid2.addDropListener(e -> { dataView1.removeItem(draggedItem); dataView2.addItem(draggedItem); }); Grid2.addDragEndListener(this::handleDragEnd); Контейнер Div = новый Div (сетка1, сетка2); setContainerStyles (контейнер); Grid1.addClassName("перетаскиваемый"); Grid2.addClassName("перетаскиваемый"); добавить (контейнер); } частный статический Grid setupGrid() { Grid сетка = новая Grid(TypeOperation.class); setGridStyles (сетка); обратная сетка; } Private void handleDragStart(GridDragStartEvent e) { перетаскиваемыйItem = e.getDraggedItems().get(0); } Private void handleDragEnd(GridDragEndEvent e) { перетаскиваемыйItem = ноль; } Private static void setGridStyles(Grid сетка) { Grid.getStyle().set("ширина", "300 пикселей").set("высота", "300 пикселей") .set("margin-left", "0,5rem").set("margin-top", "0,5rem") .set("align-self", "unset"); } Private static void setContainerStyles (контейнер Div) { Container.getStyle().set("display", "flex").set("flex-direction", "row") .set("flex-wrap", "wrap"); } }`
Я хотел бы добавить сетку с перетаскиваемыми строками внутри диалогового окна в моем приложении Vaadin 24.
Однако диалоговое окно, похоже, не позволяет сеткам обнаруживать какие-либо действия по перетаскиванию.
Я попробовал добавить в сетки имя «перетаскиваемого» класса, как рекомендовано в документации, но действие перетаскивания по-прежнему не обнаружено ни в одном браузере. Я также пробовал добавить его в сам Div или в макет, в который этот Div добавлен, но это не работает.
Вот полная реализация сеток (этот код взят из примера Ваадина с перетаскиванием строк между сетками):
`публичный класс GridDragRowsBetweenGrids расширяет Div {
private TypeOperation draggedItem; общественный GridDragRowsBetweenGrids () { List люди = новый ArrayList(); пытаться { люди = TypeOperation.getTypeOperationsFromServer(); } catch (SQLException e) { // TODO Автоматически сгенерированный блок catch е.printStackTrace(); } ArrayList люди1 = новый ArrayList(люди); ArrayList люди2 = новый ArrayList(); Gridgrid1 = setupGrid(); Gridgrid2 = setupGrid(); GridListDataView dataView1 = Grid1.setItems(people1); GridListDataView dataView2 =grid2.setItems(people2); Grid1.setDropMode(GridDropMode.ON_GRID); Grid1.setRowsDraggable(истина); Grid1.addDragStartListener(this::handleDragStart); Grid1.addDropListener(e -> { dataView2.removeItem(draggedItem); dataView1.addItem(draggedItem); }); Grid1.addDragEndListener(this::handleDragEnd); Grid2.setDropMode(GridDropMode.ON_GRID); Grid2.setRowsDraggable(истина); Grid2.addDragStartListener(this::handleDragStart); Grid2.addDropListener(e -> { dataView1.removeItem(draggedItem); dataView2.addItem(draggedItem); }); Grid2.addDragEndListener(this::handleDragEnd); Контейнер Div = новый Div (сетка1, сетка2); setContainerStyles (контейнер); Grid1.addClassName("перетаскиваемый"); Grid2.addClassName("перетаскиваемый"); добавить (контейнер); } частный статический Grid setupGrid() { Grid сетка = новая Grid(TypeOperation.class); setGridStyles (сетка); обратная сетка; } Private void handleDragStart(GridDragStartEvent e) { перетаскиваемыйItem = e.getDraggedItems().get(0); } Private void handleDragEnd(GridDragEndEvent e) { перетаскиваемыйItem = ноль; } Private static void setGridStyles(Grid сетка) { Grid.getStyle().set("ширина", "300 пикселей").set("высота", "300 пикселей") .set("margin-left", "0,5rem").set("margin-top", "0,5rem") .set("align-self", "unset"); } Private static void setContainerStyles (контейнер Div) { Container.getStyle().set("display", "flex").set("flex-direction", "row") .set("flex-wrap", "wrap"); } }`
Мобильная версия