2011-07-29 4 views
0

Comment sélectionner plusieurs fichiers présents dans des répertoires différents en utilisant FileDialog?Sélection de plusieurs fichiers dans FileChooser

Je dois créer une interface utilisateur où je dois ajouter beaucoup de fichiers de différents répertoires. Aussi, je dois créer une case à cocher pour indiquer quels fichiers sont sélectionnés pour d'autres actions.

J'ai essayé d'y parvenir en utilisant SWT, mais je n'ai pas le résultat souhaité. En fait, je ne suis pas en mesure de sélectionner chaque fichier, car je ne suis pas en mesure d'ajouter la case à cocher à chaque fichier. Depuis que je suis nouveau à SWT, j'ai de la difficulté à comprendre.

Mon code est ici:

import org.eclipse.swt.SWT; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.widgets.DirectoryDialog; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Event; 
import org.eclipse.swt.widgets.FileDialog; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.Listener; 
import org.eclipse.swt.widgets.Shell; 

public class DirFileSelection { 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    FileDialog fileDialog = new FileDialog(shell, SWT.MULTI); 
    DirectoryDialog directoryDialog = new DirectoryDialog(shell); 

    String sb = new String(""); 
    // the label used to display selected dir/file. 

    Label label = new Label(shell, SWT.BORDER | SWT.WRAP); 

    Button buttonSelectDir; 
    Button buttonSelectFile; 
    Button validate = new Button(shell, SWT.PUSH);; 
    Button reset = new Button(shell, SWT.PUSH);; 

    String selectedDir; 
    String fileFilterPath = "F:/jdk1.5"; 

    public DirFileSelection() { 

     shell.setSize(1000, 1000); 
     label.setBackground(display.getSystemColor(SWT.COLOR_WHITE)); 
     label.setText("Select a dir/file by clicking the buttons below."); 

     buttonSelectDir = new Button(shell, SWT.PUSH); 
     buttonSelectDir.setText("Select a directory"); 

     buttonSelectDir.addListener(SWT.Selection, new Listener() { 
      public void handleEvent(Event event) { 

       directoryDialog.setFilterPath(selectedDir); 
       directoryDialog.setMessage("Please select a directory and click OK"); 

       String dir = directoryDialog.open(); 
       if (dir != null) { 

        // label.setText("Selected dir: " + dir); 
        selectedDir = dir; 
        int decide = 0; 
        System.out.println(sb); 
        String[] str = sb.split("\n"); 

        for (int i = 0; i < str.length; i++) { 
         // for (int j = i; j < str.length; j++) { 
         // if(i==j){ 
         // continue; 
         // } 
         // else if(str[i].equals(str[j])){ 
         // System.out.println("dup"); 
         // x=false; 
         // } 
         // } 
         if (dir.equals(str[i])) { 
          System.out.println("dup"); 
          decide = 1; 
          break; 
         } 
        } 
        if (decide == 0) { 
         sb = sb.concat(dir + "\n"); 
         label.setText(sb); 
        } 

       } 
       // label.setText(sb.toString()); 
      } 
     }); 

     buttonSelectFile = new Button(shell, SWT.PUSH); 
     buttonSelectFile.setText("Select a file/multiple files"); 
     buttonSelectFile.addListener(SWT.Selection, new Listener() { 
      public void handleEvent(Event event) { 

       fileDialog.setFilterPath(fileFilterPath); 

       fileDialog.setFilterExtensions(new String[] { "*.*" }); 
       fileDialog.setFilterNames(new String[] { "ALL Files" }); 

       String firstFile = fileDialog.open(); 

       if (firstFile != null) { 
        fileFilterPath = fileDialog.getFilterPath(); 
        String[] selectedFiles = fileDialog.getFileNames(); 

        for (int i = 0; i < selectedFiles.length; i++) { 
         // sb.append(selectedFiles[i] + "\n"); 
         sb = sb.concat(selectedFiles[i] + " \n"); 
        } 

       } 
       label.setText(sb.toString()); 
      } 
     }); 

     validate.setText("Validate"); 
     validate.addListener(SWT.Selection, new Listener() { 

      @Override 
      public void handleEvent(Event arg0) { 
       // TODO Auto-generated method stub 

      } 

     }); 

     reset.setText("Reset"); 
     reset.addListener(SWT.Selection, new Listener() { 

      @Override 
      public void handleEvent(Event arg0) { 
       fileDialog.setFileName(null); 
       System.out.println(fileDialog.getFileName()); 
       sb = ""; 
       shell.update(); 
       label.setText(sb.toString()); 
      } 

     }); 

     label.setBounds(0, 0, 800, 180); 
     buttonSelectDir.setBounds(0, 185, 200, 20); 
     buttonSelectFile.setBounds(200, 185, 200, 20); 

     validate.setBounds(400, 185, 200, 20); 
     reset.setBounds(600, 185, 200, 20); 
     shell.pack(); 
     shell.open(); 
     // textUser.forceFocus(); 

     // Set up the event loop. 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) { 
       // If no more entries in event queue 
       display.sleep(); 
      } 
     } 

     display.dispose(); 
    } 

    public static void main(String[] args) { 
     new DirFileSelection(); 
    } 
} 

Répondre

3

Je ne suis pas au courant d'aucune façon possible de choisir plusieurs fichiers dans différents dossiers (non seulement dans SWT, mais Swing ou même OS).

Votre approche est Okey, permet de selectionner autant de fichiers qu'il/elle veut en ajoutant de nouveaux fichiers sélectionnés après ceux déjà sélectionnés (dans les dialogues de fichiers précédents). Notez ceci sur votre GUI près du bouton pour la sélection du fichier.

1
JFileChooser fc = new JFileChooser(); 
fc.setMultiSelectionEnabled(true); 

C'est tout ce que vous avez à faire, facile.

+0

La question est de sélectionner plusieurs fichiers de dossiers 'different', pas du même dossier –

Questions connexes