Java/SWT JFace Eclipse/File Dir Chooser

Материал из Java эксперт
Версия от 18:01, 31 мая 2010; (обсуждение)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

DirectoryDialog: prompt for a directory

/*
 * DirectoryDialog example snippet: prompt for a directory
 *
 * For a list of all SWT example snippets see
 * http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
 */
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Snippet33 {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.open();
    DirectoryDialog dialog = new DirectoryDialog(shell);
    dialog.setFilterPath("c:\\"); // Windows specific
    System.out.println("RESULT=" + dialog.open());
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}





Dir File Selection

/******************************************************************************
 * All Right Reserved. 
 * Copyright (c) 1998, 2004 Jackwind Li Guojie
 * 
 * Created on Mar 16, 2004 10:18:50 PM by JACK
 * $Id$
 * 
 *****************************************************************************/

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);
  
  // the label used to display selected dir/file.
  Label label;
  
  Button buttonSelectDir;
  Button buttonSelectFile;
  
  String selectedDir;
  String fileFilterPath = "F:/jdk1.5";
  public DirFileSelection() {
    label = new Label(shell, SWT.BORDER | SWT.WRAP);
    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 directoryDialog = new DirectoryDialog(shell);
        
        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;
        }
      }
    });
    
    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 fileDialog = new FileDialog(shell, SWT.MULTI);
        fileDialog.setFilterPath(fileFilterPath);
        
        fileDialog.setFilterExtensions(new String[]{"*.rtf", "*.html", "*.*"});
        fileDialog.setFilterNames(new String[]{ "Rich Text Format", "HTML Document", "Any"});
        
        String firstFile = fileDialog.open();
        if(firstFile != null) {
          fileFilterPath = fileDialog.getFilterPath();
          String[] selectedFiles = fileDialog.getFileNames();
          StringBuffer sb = new StringBuffer("Selected files under dir " + fileDialog.getFilterPath() +  ": \n");
          for(int i=0; i<selectedFiles.length; i++) {
            sb.append(selectedFiles[i] + "\n");
          }
          label.setText(sb.toString());
        }
      }
    });
    
    label.setBounds(0, 0, 400, 60);
    buttonSelectDir.setBounds(0, 65, 200, 30);
    buttonSelectFile.setBounds(200, 65, 200, 30);
    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();
  }
}





FileDialog: prompt for a file name (to save)

/*
 * FileDialog example snippet: prompt for a file name (to save)
 *
 * For a list of all SWT example snippets see
 * http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
 */
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
public class Snippet72 {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.open();
    FileDialog dialog = new FileDialog(shell, SWT.SAVE);
    dialog
        .setFilterNames(new String[] { "Batch Files", "All Files (*.*)" });
    dialog.setFilterExtensions(new String[] { "*.bat", "*.*" }); // Windows
                                    // wild
                                    // cards
    dialog.setFilterPath("c:\\"); // Windows path
    dialog.setFileName("fred.bat");
    System.out.println("Save to: " + dialog.open());
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}





File Viewer

/******************************************************************************
 * All Right Reserved. 
 * Copyright (c) 1998, 2004 Jackwind Li Guojie
 * 
 * Created on 2004-5-13 10:10:07 by JACK
 * $Id$
 * 
 *****************************************************************************/
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.StatusLineManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.ruposite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class FileViewer extends ApplicationWindow {
  // The text control used to display the file content.
  Text text; 
  
  String content;
  String lineDelimiter;
  
  IRunnableWithProgress runnableWithProgress = new IRunnableWithProgress() {
    public void run(IProgressMonitor monitor)
      throws InvocationTargetException, InterruptedException {
      System.out.println("Running from thread: " + Thread.currentThread().getName());
      
      getShell().getDisplay().syncExec(new Runnable() {
        public void run() {
          content = text.getText();
          lineDelimiter = text.getLineDelimiter();
        }
      });
      monitor.beginTask("Counting total number of lines", content.length());
      int lines = 1;
      for(int i=0; i<content.length(); i++) {
        if(monitor.isCanceled()) { // checks whether the operation has been cancelled.
          monitor.done();
          System.out.println("Action cancelled");
          return;
        }
        
        // Checks the existance of the line delimiter.
        if(i + lineDelimiter.length() < content.length()) {
          if(lineDelimiter.equals(content.substring(i, i+lineDelimiter.length()))) {
            lines ++;
          }
        }
        
        monitor.worked(1);
        Thread.sleep(1); // 1ms
      }
      
      monitor.done();
      System.out.println("Total number of lines: " + lines);
    }
  };
  
  Action actionCount = new Action("Count", ImageDescriptor.createFromFile(null, "icons/run.gif")) {
    public void run() {
      try {
        FileViewer.this.run(true, true, runnableWithProgress);
      } catch (InvocationTargetException e) {
        e.printStackTrace();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  };
  
  /**
   * @param parentShell
   */
  public FileViewer(Shell parentShell) {
    super(parentShell);
    addMenuBar();
    addStatusLine();
    addToolBar(SWT.FLAT);
  }
  /* (non-Javadoc)
   * @see org.eclipse.jface.window.Window#createContents(org.eclipse.swt.widgets.ruposite)
   */
  protected Control createContents(Composite parent) {
    getShell().setText("FileViewer v2.0");
    setStatus("Ready");
    
    text = new Text(parent, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    text.setSize(300, 200);
    return text;
  }
  
  Action actionOpenFile = new Action("Open", ImageDescriptor.createFromFile(null, "icons/open.gif")) {
    public void run() {
      FileDialog dialog = new FileDialog(getShell(), SWT.OPEN);
      final String file = dialog.open();
      if(file != null) {
        try {
          String content = readFileAsAString(new File(file));
          text.setText(content);
          setStatus("File loaded successfully: " + file);
        } catch (IOException e) {
          e.printStackTrace();
          setStatus("Failed to load file: " + file);
        }
      }
    }
  };
  /* (non-Javadoc)
   * @see org.eclipse.jface.window.ApplicationWindow#createMenuManager()
   */
  protected MenuManager createMenuManager() {
    MenuManager menuManager = new MenuManager("");
    
    MenuManager fileMenuManager = new MenuManager("&File");
    fileMenuManager.add(actionOpenFile);
    
    menuManager.add(fileMenuManager);
    
    MenuManager toolsMenuManager = new MenuManager("&Tools");
    toolsMenuManager.add(actionCount);
    menuManager.add(toolsMenuManager);
    
    return menuManager;
  }
  /* (non-Javadoc)
   * @see org.eclipse.jface.window.ApplicationWindow#createStatusLineManager()
   */
  protected StatusLineManager createStatusLineManager() {
    return super.createStatusLineManager();
  }
  /* (non-Javadoc)
   * @see org.eclipse.jface.window.ApplicationWindow#createToolBarManager(int)
   */
  protected ToolBarManager createToolBarManager(int style) {
    ToolBarManager toolBarManager = new ToolBarManager(style);
    toolBarManager.add(actionOpenFile);
    toolBarManager.add(actionCount);
    return toolBarManager;
  }
  public static void main(String[] args) {
    ApplicationWindow viewer = new FileViewer(null);
    viewer.setBlockOnOpen(true);
    viewer.open();
  }
  
  /**
   * Reads the content of a file into a String. 
   * @param file file to be read
   * @return
   * @throws IOException
   */
  public static String readFileAsAString(File file) throws IOException {
    return new String(getBytesFromFile(file));
  }
  
  /**
   * Returns the contents of the file in a byte array. 
   * @param file
   * @return
   * @throws IOException
   */
  public static byte[] getBytesFromFile(File file) throws IOException {
    InputStream is = new FileInputStream(file);
    // Get the size of the file
    long length = file.length();
    // You cannot create an array using a long type.
    // It needs to be an int type.
    // Before converting to an int type, check
    // to ensure that file is not larger than Integer.MAX_VALUE.
    if (length > Integer.MAX_VALUE) {
      // File is too large
      throw new IllegalArgumentException("File is too large! (larger or equal to 2G)");
    }
    // Create the byte array to hold the data
    byte[] bytes = new byte[(int) length];
    // Read in the bytes
    int offset = 0;
    int numRead = 0;
    while (offset < bytes.length
      && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
      offset += numRead;
    }
    // Ensure all the bytes have been read in
    if (offset < bytes.length) {
      throw new IOException(
        "Could not completely read file " + file.getName());
    }
    // Close the input stream and return bytes
    is.close();
    return bytes;
  }
}