2011-07-29 30 views
0

如何選擇當前使用的FileDialog不同的目錄多個文件?選擇多個文件在文件選擇

我需要創建一個UI,我需要從不同的目錄中添加大量的文件。另外,我需要創建一個複選框來指示哪些文件被選中以進行進一步的操作。

我試圖做到這一點使用SWT,但我沒有得到期望的結果。事實上,我無法選擇每個文件,因爲我無法將複選框添加到每個文件。由於我是SWT新手,我很難理解。

我的代碼是在這裏:

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(); 
    } 
} 

回答

3

我不知道的任何可能的方式來選擇不同的文件夾多個文件(不只是在SWT,但在搖擺,甚至操作系統的)。

你的做法是好,讓他/她想要通過後,已經選擇那些添加新選定的文件(在以前的文件對話框),用戶選擇多個文件。把它寫到靠近文件選擇按鈕的GUI上。

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

這就是所有你必須做的,容易。

+0

的問題是有關從'different'文件夾中選擇多個文件,而不是從同一個文件夾 –