Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    47

    Eccezione in java: drag and drop

    Salve a tutti! ho il seguente codice che inserisce i file all'interno della label per trascinamento!
    Il problema sta nel fatto che se provo ad inserire lo stesso file, lo inserisce tutte le volte. Quello che vorrei fare io e che non ci sono ancora riuscita è far inserire un solo "allegato" per volta e in caso di allegati uguali aggiungere sempre l'ultimo. Non so come gestirli anche perchè non essendo un file di I/O non accetta tutta la funzione exitsts().
    Riuscite ad aiutarmi per favore?
    codice HTML:
    import java.awt.BorderLayout;import java.awt.Color;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.Transferable;
    import java.awt.dnd.DnDConstants;
    import java.awt.dnd.DropTarget;
    import java.awt.dnd.DropTargetDragEvent;
    import java.awt.dnd.DropTargetDropEvent;
    import java.awt.dnd.DropTargetEvent;
    import java.awt.dnd.DropTargetListener;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JTextArea;
    
    public class Main extends JFrame implements DropTargetListener {
    
      DropTarget dt;
    
      JTextArea ta = new JTextArea();
    
      public Main() {
        super("Drop Test");
        setSize(300, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
        add(new JLabel("Drop a list from your file chooser here:"), BorderLayout.NORTH);
        ta.setBackground(Color.white);
        getContentPane().add(ta, BorderLayout.CENTER);
    
        dt = new DropTarget(ta, this);
        setVisible(true);
      }
    
      public void dragEnter(DropTargetDragEvent dtde) {
      }
    
    
      public void dragExit(DropTargetEvent dte) {
       
      }
    
      public void dragOver(DropTargetDragEvent dtde) {
        
      }
    
      public void dropActionChanged(DropTargetDragEvent dtde) {
          }
    
      public void drop(DropTargetDropEvent dtde) {
        try {
          Transferable tr = dtde.getTransferable();
          DataFlavor[] flavors = tr.getTransferDataFlavors();
          for (int i = 0; i < flavors.length; i++) {
            System.out.println("Possible flavor: " + flavors[i].getMimeType());
            if (flavors[i].isFlavorJavaFileListType()) {
              dtde.acceptDrop(DnDConstants.ACTION_COPY);
              //ta.setText("Successful file list drop.\n\n");
    
              java.util.List list = (java.util.List) tr.getTransferData(flavors[i]);
              for (int j = 0; j < list.size(); j++) {
                ta.append(list.get(j) + "\n");
              }
              dtde.dropComplete(true);
              return;
            }
          }
          System.out.println("Drop failed: " + dtde);
          dtde.rejectDrop();
        } catch (Exception e) {
          e.printStackTrace();
          dtde.rejectDrop();
        }
      }
    
      public static void main(String args[]) {
        new Main();
      }
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sposto nel forum Java.


    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

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da main_001 Visualizza il messaggio
    Non so come gestirli anche perchè non essendo un file di I/O non accetta tutta la funzione exitsts().
    Il DataFlavor javaFileListFlavor garantisce 2 cose: che l'oggetto trasferito è gestibile al livello più astratto come java.util.List (non puoi "vederlo" come lista più specifica) e che gli oggetti contenuti nella lista sono dei java.io.File.
    Quindi con questi File puoi farci exists() o quello che ti pare.

    https://docs.oracle.com/javase/8/doc...FileListFlavor
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    47
    Non riesco ad implementarlo mi daresti una mano?? per favore?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da main_001 Visualizza il messaggio
    Non riesco ad implementarlo mi daresti una mano?? per favore?
    Il getTransferData di Transferable tecnicamente restituisce un Object. Tu sai che è sicuramente un java.util.List, quindi puoi fare un cast.
    Puoi anche fare un cast a List<File> ma è "unchecked" e causa un warning che dovresti poi sopprimere con una apposita annotation.
    Se hai il raw type ovvero solo List (e non List<File>), ogni elemento è visto come Object ma tu sai (l'abbiamo detto prima) che è sicuramente un java.io.File, quindi idem puoi fare un cast.
    Cosa fai poi con il reference di tipo java.io.File ... dipende da te.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    47
    mmm... ho quasi chiara la tua idea ma ho difficoltà ad implementarla

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da main_001 Visualizza il messaggio
    mmm... ho quasi chiara la tua idea ma ho difficoltà ad implementarla
    codice:
    List list = (List) tr.getTransferData(flavors[i]);
    
    for (Object item : list) {
        File file = (File) item;
        // .....usa file
    }

    Presuppone ovviamente l'import di java.util.List e java.io.File.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    47
    Ci sono quasi ma non del tutto perchè adesso non mi fa più la stampa sulla textArea e in pi se inserisco un "allegato" da una x cartella questo scompare magicamente


    codice:
    //java.util.List list = (java.util.List) tr.getTransferData(flavors[i]);
              List list = (List) tr.getTransferData(flavors[i]);
    
    
              for (Object item : list) {
                  File file = (File) item;
                  if(file.exists())
                      file.delete();
                  else
                      ta.append( file + "\n");
                  
                 
              }
    Ultima modifica di LeleFT; 21-04-2016 a 09:33 Motivo: Sistemati i tag CODE

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da main_001 Visualizza il messaggio
    Ci sono quasi ma non del tutto perchè adesso non mi fa più la stampa sulla textArea e in pi se inserisco un "allegato" da una x cartella questo scompare magicamente
    delete() di File cancella fisicamente, materialmente il file dal file-system .... scusa ma cosa ti aspettavi??

    Ma poi che senso ha una logica: "se il file esiste lo cancello altrimenti lo appendo alla lista"?
    Il d&d ti dà solo un pathname sotto forma di java.io.File. Ma se ti droppa un pathname è perché presumibilmente l'hai draggato tu da un "esplora risorse" (o roba del genere), quindi è più che ragionevole pensare che il file fisicamente esista!
    Ultima modifica di andbin; 20-04-2016 a 23:35
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    47
    grazie mille per tutto. Sfortunatamente sono io che sono incapace e non riesco a capire bene. Imparerò con il tempo :*

Tag per questa discussione

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.