Tengo un widget personalizado que en realidad es una imagen, y me gustaría poder arrastrarlo dentro de un AbsolutePanel y obtener sus coordenadas cada vez. Me gustaría usar la nueva API DND de GWT 2.4, pero me está costando mucho implementarla. ¿Puede alguien proponer los pasos básicos que debo tomar?Arrastrar y colocar en GWT 2.4
13
A
Respuesta
12
La nueva API DnD introducida con GWT 2.4 actualmente no admite el AbsolutePanel
(consulte las implementaciones de la interfaz HasAllDragAndDropHandlers
). En cuanto a la implementación de FocusPanel
, no debería ser demasiado difícil habilitarla para otros paneles.
Aquí está una prueba rápida del concepto sobre cómo resolver su problema:
public void onModuleLoad() {
DragImage image = new DragImage();
image.setUrl(Resources.INSTANCE.someImage().getSafeUri());
final DropAbsolutePanel target = new DropAbsolutePanel();
target.getElement().getStyle().setBorderWidth(1.0, Unit.PX);
target.getElement().getStyle().setBorderStyle(BorderStyle.SOLID);
target.getElement().getStyle().setBorderColor("black");
target.setSize("200px", "200px");
// show drag over effect
target.addDragOverHandler(new DragOverHandler() {
@Override
public void onDragOver(DragOverEvent event) {
target.getElement().getStyle().setBackgroundColor("#ffa");
}
});
// clear drag over effect
target.addDragLeaveHandler(new DragLeaveHandler() {
@Override
public void onDragLeave(DragLeaveEvent event) {
target.getElement().getStyle().clearBackgroundColor();
}
});
// enable as drop target
target.addDropHandler(new DropHandler() {
@Override
public void onDrop(DropEvent event) {
event.preventDefault();
// not sure if the calculation is right, didn't test it really
int x = (event.getNativeEvent().getClientX() - target.getAbsoluteLeft()) + Window.getScrollLeft();
int y = (event.getNativeEvent().getClientY() - target.getAbsoluteTop()) + Window.getScrollTop();
target.getElement().getStyle().clearBackgroundColor();
Window.alert("x: " + x + ", y:" + y);
// add image with same URL as the dropped one to absolute panel at given coordinates
target.add(new Image(event.getData("text")), x, y);
}
});
RootPanel.get().add(image);
RootPanel.get().add(target);
}
Y aquí el panel personalizado
public class DropAbsolutePanel extends AbsolutePanel implements HasDropHandlers, HasDragOverHandlers,
HasDragLeaveHandlers {
@Override
public HandlerRegistration addDropHandler(DropHandler handler) {
return addBitlessDomHandler(handler, DropEvent.getType());
}
@Override
public HandlerRegistration addDragOverHandler(DragOverHandler handler) {
return addBitlessDomHandler(handler, DragOverEvent.getType());
}
@Override
public HandlerRegistration addDragLeaveHandler(DragLeaveHandler handler) {
return addBitlessDomHandler(handler, DragLeaveEvent.getType());
}
}
y la clase de imagen:
public class DragImage extends Image {
public DragImage() {
super();
initDnD();
}
private void initDnD() {
// enables dragging if browser supports html5
getElement().setDraggable(Element.DRAGGABLE_TRUE);
addDragStartHandler(new DragStartHandler() {
@Override
public void onDragStart(DragStartEvent event) {
// attach image URL to drag data
event.setData("text", getUrl());
}
});
}
}
Cuestiones relacionadas
- 1. Arrastrar y colocar usando jQuery
- 2. ¿Arrastrar y colocar archivos en un NSTableView?
- 3. Nodos de arrastrar y colocar en JTree
- 4. Arrastrar y colocar imágenes en java
- 5. Arrastrar y colocar en lienzo de mozilla
- 6. Arrastrar y colocar dentro de NSCollectionView
- 7. Arrastrar y colocar: jQuery UI o Scriptaculous?
- 8. C# Listview Arrastrar y colocar filas
- 9. Arrastrar y colocar en contentEditable DIV en Firefox
- 10. iOS (iPad) Arrastrar y colocar en un UISplitViewController
- 11. Arrastrar y colocar en un control de navegador alojado
- 12. Arrastrar y colocar de Outlook en una aplicación de Silverlight
- 13. jQuery Arrastrar y colocar en un área de texto
- 14. Eventos de propagación de eventos, superposición y arrastrar y colocar
- 15. Ventajas de HTML 5 Arrastrar y colocar sobre jQuery UI Arrastrar y soltar
- 16. Arrastrar y colocar directamente desde Outlook a un formulario web
- 17. C# Arrastrar y colocar: mostrar el elemento arrastrado mientras arrastra
- 18. GWT 2.4 Desplazamiento automático de DataGrid al seleccionar un elemento
- 19. Cómo instalar flexible con uiBinder para GWT 2.4
- 20. Los eventos de arrastrar y colocar en dnd plugin en jstree no se llaman
- 21. ¿Cómo arrastrar y colocar en WPF en mi aplicación "Metro Style"?
- 22. ¿Cómo puedo arrastrar y colocar como el IDE de Delphi con alfileres y pestañas?
- 23. Jquery Arrastrar y colocar en listas anidadas: cómo minimizar/eliminar el parpadeo
- 24. ¿Cómo puedo permitir arrastrar y colocar desde el Explorador de Windows en una aplicación C# WPF?
- 25. HTML5 Arrastrar y colocar: Cargar archivo de texto en un cuadro de texto con JavaScript
- 26. Cómo publicar archivos desde HTML5 Arrastrar y colocar en Rails 3 App & Paperclip?
- 27. Arrastrar y soltar archivos en WPF
- 28. ios simulador: simular arrastrar y arrastrar
- 29. Arrastrar y colocar desde la aplicación Java Swing al Explorador de Windows
- 30. hash SHA256 en Python 2.4
que pueda Te veo obteniendo puntos masivos en esta pregunta ... ¡Bien hecho! :-) –
¿Has probado smartgwt? – caarlos0
no smartgwt, empecé a usarlo una vez y no, gracias :) Uso este sitio por mucho tiempo, pero a decir verdad todavía no he encontrado el tiempo ni la curiosidad para comprobar qué significan esos puntos y estrellas ... –