Swing/RenameIfCanWriteFileChooser のバックアップの現在との差分(No.2)
TITLE:JFileChooserで読み取り専用ファイルのリネームを禁止
Posted by aterai at 2011-10-17
JFileChooserで読み取り専用ファイルのリネームを禁止
JFileChooserで読み取り専用属性ファイルのリネームを禁止します。- category: swing folder: RenameIfCanWriteFileChooser title: JFileChooserで読み取り専用ファイルのリネームを禁止 tags: [JFileChooser, File, BasicDirectoryModel] author: aterai pubdate: 2011-10-17T12:57:18+09:00 description: JFileChooserで読み取り専用属性ファイルのリネームを禁止します。 image:
概要
JFileChooser
で読み取り専用属性ファイルのリネームを禁止します。
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spandel
class CanWriteFileChooserUI extends MetalFileChooserUI{
#spanend
protected CanWriteFileChooserUI(JFileChooser chooser) {
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
#spanadd
class MetalCanWriteFileChooserUI extends MetalFileChooserUI {
#spanend
private BasicDirectoryModel model2;
protected MetalCanWriteFileChooserUI(JFileChooser chooser) {
super(chooser);
}
#spanadd
#spanend
public static ComponentUI createUI(JComponent c) {
return new CanWriteFileChooserUI((JFileChooser)c);
if (c instanceof JFileChooser) {
return new MetalCanWriteFileChooserUI((JFileChooser) c);
}
throw new InternalError("Should never happen");
}
private BasicDirectoryModel model2 = null;
#spanadd
#spanend
@Override public void createModel() {
if(model2!=null) {
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;
return oldFile.canWrite() ? super.renameFile(oldFile, newFile) : false;
}
};
}
#spanadd
#spanend
@Override public BasicDirectoryModel getModel() {
return model2;
}
}
解説
上記のサンプルでは、BasicDirectoryModel#renameFile(...)をオーバーライドして取り専用属性ファイルのリネームを確定しようとすると警告ダイアログが表示されるようになっています。解説
-
BasicDirectoryModel#renameFile(...)
メソッドをオーバーライドし、読み取り専用属性の付いたファイルの名前変更を確定しようとすると警告ダイアログを表示して変更が取り消されるように設定 - 別方法として
sun.swing.FilePane#canWrite(File)
をオーバーライドすればファイル名の編集開始自体を禁止にすることが可能かもしれない?-
MetalFileChooserUI
などのUI
でFilePane
がprivate
になっているため難しそう
-
- - sun.swing.FilePane#canWrite(File)をオーバーライドすれば、編集開始できないようにすることもできそうですが、MetalFileChooserUIなどのUIでFilePaneはprivateになっているためかなり面倒です。
参考リンク
- BasicDirectoryModel#renameFile(...) (Java Platform SE 8)
- Swing - How does the JFileChooser "readOnly" property work?
- JFileChooserを編集不可にする