Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di progAnd
    Registrato dal
    Jan 2012
    Messaggi
    119

    Consigli su Drag & Drop

    Ciao a tutti! Nella mia applicazione devo implementare il drag & drop (più che altro la parte drop): una lista di file viene trascinata su un pannello e vengono, di conseguenza, creati dei pulsanti. Le mie domande sono:
    a) Avete presente il feedback che dà il sistema operativo quando vi è un'operazione di trascinamento? L'icona del cursore a cui appare un + se stai copiando od una freccetta se stai creando un link? Come si fa a dare tale feedback in Java?
    b) Sul libro Core Java mi dicono che per usare il Drag & Drop si usa la classe DropTarget ed i relativi Listener, mentre nel Tutorial mi si dice di estendere la classe TrasferHandler. Qual'è la soluzione corretta o, per meglio dire, in che casi si usa un sistema ed i che casi l'altro?
    c) Dato che devo trascinare su un JPanel, c'è modo di sapere tra quali componenti avviene il trascinamento ed inserirli nel posto giusto? C'è modo di dare un feedback visivo?

    Grazie a chiunque sappia rispondere ad almeno una delle domande ^_^

    Ciao

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Premetto che, fino ad oggi, ho sviluppato solo applicazioni che usano il D&D internamente; non ho mai avuto la necessità (anche se sarà mia premura effettuare dei test) di effettuare D&D da sorgenti esterne o verso destinazioni esterne (che è ciò che vuoi ottenere tu).

    Per quanto riguarda le basi del sistema di D&D in Java, ti consiglio di consultare quanto scritto nel tutorial Java. Io ho trovato tutte le informazioni necessarie nel tutorial.

    Provo, comunque, a rispondere alle tue domande:

    1) Se stai trascinando un oggetto dal sistema operativo verso un'applicazione Java, non hai modo (in Java) di ottenere alcuna informazione in merito all'inizio di tale operazione. Se io prendo un file e comincio a trascinarlo posso avere, sostanzialmente, 3 casi:

    - Lo voglio trascinare da qualche altra parte (sul desktop, in una cartella, dentro ad un disco/chiavetta, ecc). E' un'operazione da Sistema Operativo a Sistema Operativo. L'applicazione Java non viene minimamente interessata dall'operazione e non dovrebbe notificare alcunché all'utente (perchè dovrebbe?)

    - Lo voglio trascinare all'interno di un programma di terze parti (un programma per masterizzare, un client FTP, ecc). Anche qui, come sopra, l'applicazione Java non è interessata e non dovrebbe notificare nulla

    - Lo voglio trascinare all'interno del mio programma Java. Qui dovrebbe notificare...

    Come fa l'applicazione, quando io inizio il trascinamento, a sapere dove lo voglio "lasciare"? Semplicemente... non può saperlo a priori. Quindi, l'inizio del trascinamento non ti potrà mai essere notificato e non avrebbe nemmeno senso.

    Diverso è il caso di un'operazione contraria: dall'applicazione Java verso il mondo esterno. Qui puoi fare quello che vuoi e, se vuoi cambiare l'icona del puntatore del mouse lo puoi fare (vedi la classe Toolkit per la generazione di cursori personalizzati ed il metodo setCursor() della classeComponent).

    2) Nel tutorial è scritto tutto... sinceramente, ho usato solo il TransferHandler e i DataFlafor.

    3) Il trascinamento può avvenire SOLO nei componenti che sono abilitati a ricevere eventi di drop... quindi, sei tu che decidi quali componenti sono in grado di "ricevere oggetti" e, di consguenza, solo il componente su cui c'è effettivamente il drop verrà notificato dell'operazione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.