Partage
  • Partager sur Facebook
  • Partager sur Twitter

Drag and Drop et SwingWorker

    12 février 2009 à 10:39:36

    Bonjour,

    Dans mon applet j'ai créé une classe zoneApercu dans laquelle on peut faire du drag and drop de fichiers qui seront ensuite récupérés et traités.

    Pour faire patienter l'utilisateur pendant le traite des fichiers qu'il a glissés (par exemple une centaine), ma méthode setWaiting() affiche une gif animé. Mon problème est que dès que le traitement commence (voir méthode drop() dans mon code), le gif animé se fige et l'interface est comme bloquée. Il semblerait que SwingWorker puisse m'aider contre ce problème, seulement je n'arrive pas à l'intégrer dans ma zoneApercu. Les tentatives que j'ai faites non menées à rien, mon gif tournait en boucle et aucun traitement ne se faisait :(

    Quelqu'un peut me guider svp?

    Voici mon code (je n'ai mis que la partie concernée par ma demande).

    Merci d'avance

    import java.awt.datatransfer.*;
    import java.awt.dnd.*;
    import java.io.*;
    import java.util.*;
    import javax.swing.*;
    import java.awt.Cursor;
    import java.awt.GridLayout;
    import java.awt.Color;
    
    public class zoneApercu extends JLabel implements DropTargetListener
    {
        // Déclarations ...
    
        public zoneApercu()
        {
            // Code ...
        }
    
        // Autres méthodes ...
        
        public void setWaiting()
        {
            Icon icon = new ImageIcon(scanJava.waitGif);
            setIcon(icon);
        }
    
        public void dragEnter(DropTargetDragEvent dtde)
        {
    
        }
    
        public void dragExit(DropTargetEvent dte)
        {
            try { interscanJava.refreshView(); }
            catch(Exception e) { e.printStackTrace(); }
        }
    
        public void dragOver(DropTargetDragEvent dtde)
        {
           this.setWaiting();
        }
    
        public void drop(DropTargetDropEvent dtde)
        {
            dtde.acceptDrop(DnDConstants.ACTION_COPY);
    
            setCursor(new Cursor(Cursor.WAIT_CURSOR));
    
            Transferable transferable = dtde.getTransferable();
            DataFlavor types[] = transferable.getTransferDataFlavors();
            File document = null;
            String copyPath = null;
    
            try
            {
                for(int i=0 ; i<types.length ; i++)
                {
                    DataFlavor type = types[i];
    
                    if(type.equals(DataFlavor.javaFileListFlavor))
                    {
                        List listeDocuments = (List) transferable.getTransferData(type);
                        for(int j=0 ; j<listeDocuments.size() ; j++)
                        {
                            document = (File) listeDocuments.get(j);
                            copyPath  = ScanWizard.importDocument(document);
                        }
                    }
                }
                scan.javascriptSetPageNumbering();
                DocumentReader.getDescription(copyPath, document.getName());
            }
            catch(Exception e) { e.printStackTrace(); }
    
            dtde.dropComplete(true);
            setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
        }
    
        public void dropActionChanged(DropTargetDragEvent dtde)
        {
    
        }
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      12 février 2009 à 20:44:01

      hep essaye de faire tes calcules dans un autres thread :)
      c'est normal que si tu utilises le processeur pour faire des calcules :) il ne sais plus l'utiliser pour redesssiner donc tu dois faire 2 choses en parallèle :o
      • Partager sur Facebook
      • Partager sur Twitter

      Drag and Drop et SwingWorker

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown