1. package org.jr.swing.filter;
  2. /**
  3. * Copyright: Copyright (c) 2002-2004
  4. * Company: JavaResearch(http://www.javaresearch.org)
  5. * 最后更新日期:2003年5月18日
  6. * @author Cherami
  7. */
  8. import java.io.*;
  9. /**
  10. * 复合文件过滤器,实现java.io.FileFilter,同时也扩展了javax.swing.filechooser.FileFilter。
  11. * 但是由于这两类过滤器的特性并不完全一样,java.io.FileFilter一般只是针对一个目录下的文件,
  12. * 不对子目录中的内容处理,而javax.swing.filechooser.FileFilter一般是包括子目录的,
  13. * 因此定义了一些方法以及构造方法进行这方面的设置。
  14. * 一般情况下,如果在构造的时候定义过滤器实例是针对IOLIST的将不包括目录,如果是针对SWING的则包括目录。
  15. * 子类必须定义的方法就是acceptFile,其内部定义就是等同于java.io.FileFilter的accept方法。
  16. * 由于要实现swing的FileFilter方法,因此子类也应该定义getDescription方法。
  17. * 另外如果子类要重新定义此类的特性可以通过覆盖includeDirectoryForSwing使之返回false即可。
  18. * 当然也可以通过直接覆盖accept方法来重新定义此类的特性。
  19. * @since 0.6
  20. */
  21. public abstract class CombineFileFilter
  22. extends javax.swing.filechooser.FileFilter
  23. implements java.io.FileFilter{
  24. /**
  25. * 常量,定义过滤器的类型为针对java.io包中的FileFilter接口。
  26. * @since 0.6
  27. */
  28. public static final int IOLIST=0;
  29. /**
  30. * 常量,定义过滤器的类型为针对javax.swing包中的FileFilter接口。
  31. * @since 0.6
  32. */
  33. public static final int SWING=1;
  34. /**
  35. * 过滤器的类型。
  36. * @since 0.6
  37. */
  38. protected int type;
  39. /**
  40. * 构造一个针对swing的CombineFileFilter。
  41. * @since 0.6
  42. */
  43. public CombineFileFilter() {
  44. this(SWING);
  45. }
  46. /**
  47. * 根据指定类型构造一个CombineFileFilter。
  48. * @param type 过滤器类型
  49. * @since 0.6
  50. */
  51. public CombineFileFilter(int type) {
  52. this.type=type;
  53. }
  54. /**
  55. * 判断指定的文件是否可以被接受。
  56. * 如果指定的类型错误则按照swing进行处理。
  57. * @param file 需要判断的文件
  58. * @return 如果。
  59. * @since 0.6
  60. */
  61. public boolean accept(File file) {
  62. switch (type) {
  63. case IOLIST:
  64. return acceptFile(file);
  65. case SWING:
  66. if (includeDirectoryForSwing()&&file.isDirectory()) {
  67. return true;
  68. }
  69. return acceptFile(file);
  70. default:
  71. if (includeDirectoryForSwing()&&file.isDirectory()) {
  72. return true;
  73. }
  74. return acceptFile(file);
  75. }
  76. }
  77. /**
  78. * 判断指定目录下的指定的文件名是否可以包含在文件列表里面。
  79. * @param dir 查找文件的目录
  80. * @param name 文件名
  81. * @return 在任何情况都返回true。
  82. * @since 0.6
  83. */
  84. public boolean accept(File dir, String name) {
  85. return acceptFile(new File(name));
  86. }
  87. /**
  88. * 判断指定的文件是否可以被接受。
  89. * @param file 需要判断的文件
  90. * @return 在任何情况都返回true。
  91. * @since 0.6
  92. */
  93. protected abstract boolean acceptFile(File file);
  94. /**
  95. * 定义在针对swing时是否包括子目录。
  96. * @return true
  97. * @since 0.6
  98. */
  99. protected boolean includeDirectoryForSwing() {
  100. return true;
  101. }
  102. }