TITLE:JFileChooserで読み取り専用ファイルのリネームを禁止

Posted by aterai at 2011-10-17

JFileChooserで読み取り専用ファイルのリネームを禁止

JFileChooserで読み取り専用属性ファイルのリネームを禁止します。

  • &jar;
  • &zip;
RenameIfCanWriteFileChooser.png

サンプルコード

class CanWriteFileChooserUI extends MetalFileChooserUI{
  protected CanWriteFileChooserUI(JFileChooser chooser) {
    super(chooser);
  }
  public static ComponentUI createUI(JComponent c) {
    return new CanWriteFileChooserUI((JFileChooser)c);
  }
  private BasicDirectoryModel model2 = null;
  @Override public void createModel() {
    if(model2!=null) {
      model2.invalidateFileCache();
    }
    model2 = new BasicDirectoryModel(getFileChooser()) {
      @Override public boolean renameFile(File oldFile, File newFile) {
        return oldFile.canWrite()?super.renameFile(oldFile, newFile):false;
      }
    };
  }
  @Override public BasicDirectoryModel getModel() {
    return model2;
  }
}

解説

上記のサンプルでは、BasicDirectoryModel#renameFile(...)をオーバーライドして取り専用属性ファイルのリネームを確定しようとすると警告ダイアログが表示されるようになっています。


sun.swing.FilePane#canWrite(File)をオーバーライドすれば、編集開始できないようにすることもできそうですが、MetalFileChooserUIなどのUIでFilePaneはprivateになっているためかなり面倒です。

参考リンク

コメント