TN5250jFileFilter.java
上传用户:xiekaiwei
上传日期:2015-07-04
资源大小:620k
文件大小:7k
源码类别:

Telnet客户端

开发平台:

Java

  1. /**
  2.  *
  3.  * A convenience implementation of FileFilter that filters out
  4.  * all files except for those type extensions that it knows about.
  5.  *
  6.  * Example - create a new filter that filerts out all files
  7.  * but gif and jpg image files:
  8.  *
  9.  *     JFileChooser chooser = new JFileChooser();
  10.  *     TN5250jFileFilter filter = new TN5250jFileFilter(
  11.  *                   new String{"gif", "jpg"}, "JPEG & GIF Images")
  12.  *     chooser.addChoosableFileFilter(filter);
  13.  *     chooser.showOpenDialog(this);
  14.  *
  15.  */
  16. package org.tn5250j.gui;
  17. import java.io.File;
  18. import javax.swing.filechooser.*;
  19. import java.util.*;
  20. public class TN5250jFileFilter extends FileFilter {
  21. //   private String TYPE_UNKNOWN = "Type Unknown";
  22. //   private String HIDDEN_FILE = "Hidden File";
  23.    private Hashtable filters = null;
  24.    private String description = null;
  25.    private String fullDescription = null;
  26.    private boolean useExtensionsInDescription = true;
  27.    /**
  28.    * Creates a file filter. If no filters are added, then all
  29.    * files are accepted.
  30.    *
  31.    * @see #addExtension
  32.    */
  33.    public TN5250jFileFilter() {
  34.       this.filters = new Hashtable(5);
  35.    }
  36.    /**
  37.    * Creates a file filter that accepts files with the given extension.
  38.    * Example: new TN5250jFileFilter("jpg");
  39.    *
  40.    * @see #addExtension
  41.    */
  42.    public TN5250jFileFilter(String extension) {
  43.       this(extension,null);
  44.    }
  45.    /**
  46.    * Creates a file filter that accepts the given file type.
  47.    * Example: new TN5250jFileFilter("jpg", "JPEG Image Images");
  48.    *
  49.    * Note that the "." before the extension is not needed. If
  50.    * provided, it will be ignored.
  51.    *
  52.    * @see #addExtension
  53.    */
  54.    public TN5250jFileFilter(String extension, String description) {
  55.       this();
  56.       if(extension!=null)
  57.          addExtension(extension);
  58.       if(description!=null)
  59.          setDescription(description);
  60.    }
  61.    /**
  62.    * Creates a file filter from the given string array.
  63.    * Example: new TN5250jFileFilter(String {"gif", "jpg"});
  64.    *
  65.    * Note that the "." before the extension is not needed adn
  66.    * will be ignored.
  67.    *
  68.    * @see #addExtension
  69.    */
  70.    public TN5250jFileFilter(String[] filters) {
  71.       this(filters, null);
  72.    }
  73.    /**
  74.    * Creates a file filter from the given string array and description.
  75.    * Example: new TN5250jFileFilter(String {"gif", "jpg"}, "Gif and JPG Images");
  76.    *
  77.    * Note that the "." before the extension is not needed and will be ignored.
  78.    *
  79.    * @see #addExtension
  80.    */
  81.    public TN5250jFileFilter(String[] filters, String description) {
  82.       this();
  83.       for (int i = 0; i < filters.length; i++) {
  84.        // add filters one by one
  85.        addExtension(filters[i]);
  86.       }
  87.       if(description!=null)
  88.          setDescription(description);
  89.    }
  90.    /**
  91.    * Return true if this file should be shown in the directory pane,
  92.    * false if it shouldn't.
  93.    *
  94.    * Files that begin with "." are ignored.
  95.    *
  96.    * @see #getExtension
  97.    * @see FileFilter#accepts
  98.    */
  99.    public boolean accept(File f) {
  100.       if(f != null) {
  101.          if(f.isDirectory()) {
  102.             return true;
  103.          }
  104.          String extension = getExtension(f);
  105.          if(extension != null && filters.get(getExtension(f)) != null) {
  106.             return true;
  107.          }
  108.       }
  109.       return false;
  110.    }
  111.    /**
  112.    * Return the extension portion of the file's name .
  113.    *
  114.    * @see #getExtension
  115.    * @see FileFilter#accept
  116.    */
  117.    public String getExtension(File f) {
  118.       if(f != null) {
  119.          return getExtension(f.getName());
  120.       }
  121.       return null;
  122.    }
  123.    public String getExtension(String filename) {
  124.       if(filename != null) {
  125.          int i = filename.lastIndexOf('.');
  126.          if(i>0 && i<filename.length()-1) {
  127.             return filename.substring(i+1).toLowerCase();
  128.          }
  129.       }
  130.       return null;
  131.    }
  132.   /**
  133.    * Adds a filetype "dot" extension to filter against.
  134.    *
  135.    * For example: the following code will create a filter that filters
  136.    * out all files except those that end in ".jpg" and ".tif":
  137.    *
  138.    *   TN5250jFileFilter filter = new TN5250jFileFilter();
  139.    *   filter.addExtension("jpg");
  140.    *   filter.addExtension("tif");
  141.    *
  142.    * Note that the "." before the extension is not needed and will be ignored.
  143.    */
  144.    public void addExtension(String extension) {
  145.       if(filters == null) {
  146.          filters = new Hashtable(5);
  147.       }
  148.       filters.put(extension.toLowerCase(), this);
  149.       fullDescription = null;
  150.    }
  151.    /**
  152.    * Returns the human readable description of this filter. For
  153.    * example: "JPEG and GIF Image Files (*.jpg, *.gif)"
  154.    *
  155.    * @see setDescription
  156.    * @see setExtensionListInDescription
  157.    * @see isExtensionListInDescription
  158.    * @see FileFilter#getDescription
  159.    */
  160.    public String getDescription() {
  161.       if(fullDescription == null) {
  162.          if(description == null || isExtensionListInDescription()) {
  163.             fullDescription = description==null ? "(" : description + " (";
  164.             // build the description from the extension list
  165.             Enumeration extensions = filters.keys();
  166.             if(extensions != null) {
  167.                fullDescription += "." + (String) extensions.nextElement();
  168.                while (extensions.hasMoreElements()) {
  169.                   fullDescription += ", ." + (String) extensions.nextElement();
  170.                }
  171.             }
  172.             fullDescription += ")";
  173.             } else {
  174.                fullDescription = description;
  175.             }
  176.       }
  177.       return fullDescription;
  178.    }
  179.    /**
  180.    * Sets the human readable description of this filter. For
  181.    * example: filter.setDescription("Gif and JPG Images");
  182.    *
  183.    * @see setDescription
  184.    * @see setExtensionListInDescription
  185.    * @see isExtensionListInDescription
  186.    */
  187.    public void setDescription(String description) {
  188.       this.description = description;
  189.       fullDescription = null;
  190.    }
  191.    /**
  192.    * Determines whether the extension list (.jpg, .gif, etc) should
  193.    * show up in the human readable description.
  194.    *
  195.    * Only relevent if a description was provided in the constructor
  196.    * or using setDescription();
  197.    *
  198.    * @see getDescription
  199.    * @see setDescription
  200.    * @see isExtensionListInDescription
  201.    */
  202.    public void setExtensionListInDescription(boolean b) {
  203.       useExtensionsInDescription = b;
  204.       fullDescription = null;
  205.    }
  206.    /**
  207.    * Returns whether the extension list (.jpg, .gif, etc) should
  208.    * show up in the human readable description.
  209.    *
  210.    * Only relevent if a description was provided in the constructor
  211.    * or using setDescription();
  212.    *
  213.    * @see getDescription
  214.    * @see setDescription
  215.    * @see setExtensionListInDescription
  216.    */
  217.    public boolean isExtensionListInDescription() {
  218.       return useExtensionsInDescription;
  219.    }
  220.    /**
  221.     * Set the extension to be used for this type if one is not provided
  222.     *    This will append the first key of the filter contained in the list
  223.     */
  224.    public String setExtension(File f) {
  225.       return setExtension(f.getAbsolutePath());
  226.    }
  227.    public String setExtension(String f) {
  228.       if (f != null & getExtension(f) == null) {
  229.          Enumeration e = filters.keys();
  230.          String ext = (String)e.nextElement();
  231.          // just a little extra check for html documents
  232.          if (ext.equals("htm"))
  233.             ext = "html";
  234.          f += "." + ext.toLowerCase();
  235.       }
  236.       return f;
  237.    }
  238. }