Swing/RenameIfCanWriteFileChooser のバックアップ(No.12)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/RenameIfCanWriteFileChooser へ行く。
  - 1 (2011-10-21 (金) 02:12:49)
- 2 (2011-12-15 (木) 20:34:29)
- 3 (2012-12-16 (日) 01:40:28)
- 4 (2013-09-05 (木) 00:39:56)
- 5 (2014-11-25 (火) 03:03:31)
- 6 (2015-02-05 (木) 14:35:02)
- 7 (2016-08-19 (金) 16:19:26)
- 8 (2017-10-05 (木) 14:30:25)
- 9 (2019-04-04 (木) 14:26:18)
- 10 (2021-01-14 (木) 17:59:30)
- 11 (2023-07-27 (木) 18:37:23)
- 12 (2024-03-18 (月) 14:17:20)
- 13 (2025-01-03 (金) 08:57:02)
- 14 (2025-01-03 (金) 09:01:23)
- 15 (2025-01-03 (金) 09:02:38)
- 16 (2025-01-03 (金) 09:03:21)
- 17 (2025-01-03 (金) 09:04:02)
- 18 (2025-06-19 (木) 12:41:37)
- 19 (2025-06-19 (木) 12:43:47)
 
- category: swing
folder: RenameIfCanWriteFileChooser
title: JFileChooserで読み取り専用ファイルのリネームを禁止
tags: [JFileChooser, File, BasicDirectoryModel]
author: aterai
pubdate: 2011-10-17T12:57:18+09:00
description: JFileChooserで読み取り専用属性ファイルのリネームを禁止します。
image:  
概要
JFileChooserで読み取り専用属性ファイルのリネームを禁止します。
Screenshot

Advertisement
サンプルコード
class MetalCanWriteFileChooserUI extends MetalFileChooserUI {
  private BasicDirectoryModel model2;
  protected MetalCanWriteFileChooserUI(JFileChooser chooser) {
    super(chooser);
  }
  public static ComponentUI createUI(JComponent c) {
    if (c instanceof JFileChooser) {
      return new MetalCanWriteFileChooserUI((JFileChooser) c);
    }
    throw new InternalError("Should never happen");
  }
  @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になっているため難しいかもしれない
 
参考リンク
- BasicDirectoryModel#renameFile(...) (Java Platform SE 8)
- Swing - How does the JFileChooser "readOnly" property work?
- JFileChooserを編集不可にする