Swing/RenameIfCanWriteFileChooser の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/RenameIfCanWriteFileChooser へ行く。
- Swing/RenameIfCanWriteFileChooser の差分を削除
--- category: swing folder: RenameIfCanWriteFileChooser title: JFileChooserで読み取り専用ファイルのリネームを禁止 tags: [JFileChooser, File, BasicDirectoryModel] author: aterai pubdate: 2011-10-17T12:57:18+09:00 description: JFileChooserで読み取り専用属性ファイルのリネームを禁止します。 image: https://lh5.googleusercontent.com/-7ODSj6DaIig/TpsQEay0NqI/AAAAAAAABDs/8fz14wjADj0/s800/RenameIfCanWriteFileChooser.png --- * 概要 [#summary] `JFileChooser`で読み取り専用属性ファイルのリネームを禁止します。 #download(https://lh5.googleusercontent.com/-7ODSj6DaIig/TpsQEay0NqI/AAAAAAAABDs/8fz14wjADj0/s800/RenameIfCanWriteFileChooser.png) * サンプルコード [#sourcecode] #code(link){{ 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; } } }} * 解説 [#explanation] - `BasicDirectoryModel#renameFile(...)`メソッドをオーバーライドし、読み取り専用属性の付いたファイルの名前変更を確定しようとすると警告ダイアログを表示して変更が取り消されるように設定 - `sun.swing.FilePane#canWrite(File)`をオーバーライドすれば、ファイル名の編集開始自体を禁止にすることが可能? -- `MetalFileChooserUI`などの`UI`で`FilePane`が`private`になっているため難しいかもしれない - 別方法として`sun.swing.FilePane#canWrite(File)`をオーバーライドすればファイル名の編集開始自体を禁止にすることが可能かもしれない? -- `MetalFileChooserUI`などの`UI`で`FilePane`が`private`になっているため難しそう * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/plaf/basic/BasicDirectoryModel.html#renameFile-java.io.File-java.io.File- BasicDirectoryModel#renameFile(...) (Java Platform SE 8)] - [https://community.oracle.com/thread/2300004 Swing - How does the JFileChooser "readOnly" property work?] - [[JFileChooserを編集不可にする>Swing/ROFileChooser]] * コメント [#comment] #comment #comment