易码技术论坛

 找回密码
 加入易码
搜索
查看: 129373|回复: 1

[源码] 自己重写了一下JFileChooser

[复制链接]
发表于 2007-1-9 01:26:46 | 显示全部楼层
阅~
 楼主| 发表于 2007-1-6 00:43:51 | 显示全部楼层 |阅读模式
发现JFileChooser好像不支持根据当前FileFilter在没有后缀的情况下自动加后缀以及在打开文件时对不存在的文件的判断和保存文件时对已存在文件覆盖的判断

所以就自己重写了下 觉得还是比较有用就放上来 高手看了不要笑=。=~
试用到现在觉得还可以 没什么问题 有问题请告诉我 或者说其实JFileChooser有这些功能只是我没有看到的话也请告诉我然后一笑而过=。=~

为了实现自动加后缀 给FileFilter加了一个suffix的成员和getSuffix方法

看代码:MyFileChooser
  1. import java.awt.Point;
  2. import java.io.File;
  3. import javax.swing.JDialog;
  4. import javax.swing.JFileChooser;
  5. import javax.swing.JFrame;
  6. import javax.swing.JOptionPane;
  7. public class MyFileChooser extends JFileChooser {
  8.    private JDialog dialog;
  9.    private File file;
  10.    private boolean save, isAcceptAll;
  11.    private int choose;
  12.    private MyFileFilter acceptAll;
  13.    public MyFileChooser() {
  14.       super();
  15.       super.setAcceptAllFileFilterUsed(false);
  16.       acceptAll = new MyFileFilter("", "所有文件"); //将AcceptAll也用MyFileFilter来代替
  17.       this.setFileFilter(acceptAll);
  18.       isAcceptAll = true;
  19.    }
  20.    
  21.    public boolean isAcceptAllFileFilterUsed() { //重写了判断是否使用了AcceptAll的方法
  22.       return isAcceptAll;
  23.    }
  24.    
  25.    public void setAcceptAllFileFilterUsed(boolean b) { //重写了设置是否使用AccetpAll的方法
  26.       if (b && !isAcceptAll) {
  27.         this.addChoosableFileFilter(acceptAll);
  28.         isAcceptAll = true;
  29.       } else if (!b && isAcceptAll) {
  30.         this.removeChoosableFileFilter(acceptAll);
  31.         isAcceptAll = false;
  32.       }
  33.    }
  34.    
  35.    public void approveSelection() { //重写按下approve时的方法
  36.       choose = JFileChooser.APPROVE_OPTION;
  37.       
  38.       file = this.getSelectedFile();
  39.       if (!haveSuffix(file.getName())) { //如果没有后缀则自动根据当前FileFilter加后缀
  40.         file = new File(file.getPath()+((MyFileFilter)this.getFileFilter()).getSuffix());
  41.         this.setSelectedFile(file); //将加了后缀的文件名送回selectedFile
  42.       }
  43.       
  44.       if (save) { //当保存时文件已存在的判断
  45.         if (file.exists()) {
  46.            if (JOptionPane.showConfirmDialog(dialog, "文件已存在\n想覆盖文件吗?", "文件已存在", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE)
  47.                 ==JOptionPane.OK_OPTION) {
  48.               dialog.setVisible(false);
  49.            }
  50.         } else {
  51.            dialog.setVisible(false);
  52.         }
  53.       } else { //当打开时文件不存在的判断
  54.         if (!file.exists()) {
  55.            JOptionPane.showMessageDialog(dialog, "文件不存在", "文件不存在", JOptionPane.ERROR_MESSAGE);
  56.         } else {
  57.            dialog.setVisible(false);
  58.         }
  59.       }
  60.    }
  61.    
  62.    public void cancelSelection() {
  63.       choose = JFileChooser.CANCEL_OPTION;
  64.       file = null;
  65.       dialog.setVisible(false);
  66.    }
  67.    
  68.    public int showDialog(JFrame owner, boolean isSave) { //自己写了一个showDialog实现showOpenDialog和showSaveDialog的功能
  69.       save = isSave;
  70.       
  71.       dialog = new JDialog(owner, true);
  72.       
  73.       if (save) {
  74.         this.setApproveButtonText("保存");
  75.         this.setApproveButtonToolTipText("保存到选中的文件");
  76.         dialog.setTitle("保存");
  77.       } else {
  78.         this.setApproveButtonText("打开");
  79.         this.setApproveButtonToolTipText("打开选中的文件");
  80.         dialog.setTitle("打开");
  81.       }
  82.       
  83.       dialog.add(this);
  84.       dialog.pack();
  85.       dialog.setResizable(false);
  86.       Point p = owner.getLocation();
  87.       dialog.setLocation(p.x+60, p.y+100);
  88.       dialog.setVisible(true);
  89.       
  90.       return choose;
  91.    }
  92.    
  93.    private boolean haveSuffix(String name) {
  94.       for (int i = 0; i<name.length(); i++)
  95.         if (name.charAt(i)==&#39;.&#39;)
  96.            return true;
  97.       
  98.       return false;
  99.    }
  100. }
复制代码

MyFileFilter:
  1. import java.io.File;
  2. import javax.swing.filechooser.FileFilter;
  3. public class MyFileFilter extends FileFilter{
  4.    private String suffix, des;
  5.    
  6.    public MyFileFilter(String endsWith, String description) {
  7.       super();
  8.       suffix = endsWith;
  9.       des = description;
  10.    }
  11.    
  12.    public boolean accept(File file) {
  13.       if (file.isDirectory())
  14.         return true;
  15.       String tmp = file.getName().toLowerCase();
  16.       if (tmp.endsWith(suffix))
  17.         return true;
  18.       return false;
  19.    }
  20.    
  21.    public String getDescription() {
  22.       return des;
  23.    }
  24.    
  25.    public String getSuffix() { //返回后缀名
  26.       return suffix;
  27.    }
  28. }
复制代码
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-26 05:08 , Processed in 0.013068 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表