Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] swing Drag & Drop

    ciao a tutti,
    spero qualcuno possa essermi di aiuto.....
    ho un JTree, vorrei poter spostare i nodi a piacimento con il mouse, faccio quindi:

    JTree.setDragEnabled(true);
    JTree.setDropMode(DropMode.ON_OR_INSERT);

    a questo punto se sposto il puntatore diventa un divieto, ma posso mettere il nodo su una JTextArea alla quale viene aggiunto il nome del nodo.

    se prendo un oggetto qualsiasi (ad esempio dal desktop) vedo il puntatore con il + e si evidenzia il nodo sul quale mi posiziono col mouse (DropMode).

    a questo punto ho pensato che per spostare i miei nodi dovevo fare...

    JTree.setTransferHandler(new TransferHandler() {
    public int getSourceActions(JComponent c){ override }
    public boolean canImport(TransferHandler.TransferSupport support){ override }
    public void exportAsDrag(JComponent comp, InputEvent e, int action) { override }
    public boolean importData(TransferHandler.TransferSupport support){ override }
    });

    succede che non si visualizza più il divieto se tento di spostare un nodo, e nemmeno si selezionano i nodi dove mi sposto con il mouse....
    funziona invece per gli oggetti esterni (ad esempio dal desktop)

    come cavolo si usa questa cosa??

  2. #2
    salve, ho trovato del codice dove sto tizio dichiara 2 variabili nel Frame

    TreeDragSource ds;
    TreeDropTarget dt;

    class TreeDragSource implements DragSourceListener, DragGestureListener {
    DragSource source;
    DragGestureRecognizer recognizer;
    JTree sourceTree;

    public TreeDragSource(JTree tree, int actions) {
    sourceTree = tree;
    source = new DragSource();
    recognizer = source.createDefaultDragGestureRecognizer(sourceTr ee,actions, this);
    }
    ...

    class TreeDropTarget implements DropTargetListener {
    DropTarget target;
    JTree targetTree;

    public TreeDropTarget(JTree tree) {
    targetTree = tree;
    target = new DropTarget(targetTree, this);
    }
    ...

    poi le inizializza così...

    ds = new TreeDragSource(tree, DnDConstants.ACTION_COPY_OR_MOVE);
    dt = new TreeDropTarget(tree);

    queste 2 classi implementano dei Listner, ma non si dovrebbe creare un listner e aggiungerlo all'oggetto JTree??
    C'è qualche metodo add* su JTree per questi listner??

    quì vedo che crea i listner, e al listner aggancia l'oggetto tree (JTree)......

    se poi nel frame faccio tree.setDragEnabled(true); vengono generate un casino di exception e quello sopra non funziona.... :master:

    mi sembra una soluzione un pò "arrangiata" visto che il JTree ha il TransferHandler che dovrebbe servire a questo scopo....

    Nessuno di voi ha mai dovuto o voluto spostare i nodi del JTree semplicemente con il mouse??

  3. #3
    Risolto......
    non dovevo riscrivere il metodo exportAsDrag, basta riscrivere il metodo createTransferable che viene chiamato in automatico da exportAsDrag:

    public Transferable createTransferable(JComponent c){
    // viene chiamato se ad iniziare il Drag è il componente al quale è associato
    // il TransferHandler, inizializzo quindi le variabili private da me create nell'extend
    // della classe. e creo un oggetto Transferrable
    return new StringSelection("io ho fatto il Drag");
    }

    poi riscrivo il metodo richiamato sul Drop:

    public boolean importData(TransferHandler.TransferSupport support) {
    // prendo il Transferable, se trovo "io ho fatto il Drag" vuol dire che ho iniziato il il drag
    // allora faccio il drop usando le variabili private che ho inizializzato in createTransferable
    return true;
    }

    un altro metodo da riscrivere ma non è necessario ai fini della riuscita delloperazione è:

    public boolean canImport(TransferHandler.TransferSupport support) {
    // viene chiamata ripetutamente mentre si sposta il mouse
    // se torna true viene accettato il drop e l'icona ha un mouse con il segno "+"
    // se torna false il drop non viene accettato e il metodo importData non viene chiamato
    // il puntatore mouse diventa un divieto
    }

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.