【问题标题】:JFileChooser and the "Details View"JFileChooser 和“详细信息视图”
【发布时间】:2011-03-07 14:59:18
【问题描述】:

使用 JFileChooser 时,有一个“详细信息视图”按钮。 每个文件显示 5 条信息。 图标、名称、大小、类型和“修改日期”。 什么类控制“类型”值? 使用“FileView”类,可以控制图标和名称。 使用“文件”类,可以控制大小和“修改日期”。 类型描述非常好,我想在其他地方使用它们,我也有一些“新”类型,我希望能够给出一个 “类型”描述到。

【问题讨论】:

    标签: java swing jfilechooser


    【解决方案1】:

    【讨论】:

    • 否,“FileView”类方法不会更改“JFileChooser”中的“Type”列值。
    • +1,@Joe,如果您覆盖该方法,那么我相信您可以返回您想要的任何“描述”。但我会覆盖 JFileChooser 上的方法,而不是 FileView。
    • 没有。我试过了,'JFileChooser' 'Type' 列根本不受 FileView 的类型描述方法的影响。
    • @camickr 谢谢@Joe 我很确定是先生,我必须在另一个答案中发布我的代码,等一下。
    • Camickr...谢谢。 'JFileChooser' 的 'getTypeDescription' 方法确实可以控制显示的 'type' 字符串。现在的问题是类型字符串是在哪个类中创建的?
    【解决方案2】:
    import javax.swing.*;
    import javax.swing.filechooser.*;
    import java.io.*;
    
    
    public class A {
    public static void main(String[] args) {
        File f = new File("f.jpg");
        JFileChooser j = new JFileChooser();
        System.out.println(j.getTypeDescription(f));
    }
    }
    

    输出在我的系统上:

    F:>javac A.java

    F:>java A

    IrfanView JPG 文件

    这是因为我的系统上安装了 IrfanView; JFileChooser/FileView>>getTypeDescription() 查询系统(在我的情况下为 Windows)以获取此信息。要“添加您自己的描述”,您可以(如 camickr 所说)覆盖 getTypeDescription() 或者您可以将其添加到您的系统中(在 Windows 的情况下,在注册表中的 HKEY_CLASSES_ROOT 下)。

    【讨论】:

    • 是的,你是对的。问题是,在您的示例中,“f.jpg”是一个真实文件。 “类型”名称的计算比文件扩展名更多。例如,如果您刚刚编了一个像“Bubba.jpg”这样的名称,则类型描述将是“通用类型”。我希望看到哪个类实际计算了“类型”值。 JFileChooser 没有“setTypeDescription 方法,在 FileView 中设置类型不会改变或修改 JFileChooser 类型列中的类型描述。
    • 不,它不查看文件;我可以制作一个 0 字节的文件(例如使用记事本),将其命名为“f.jpg”,运行我的程序,它会显示 IrfanView JPG File。正如我所说,它根据扩展名(例如“jpg”)在注册表(HKEY_CLASSES_ROOT)中查找此信息。
    • 刚刚进行了快速测试,在“详细信息视图”中覆盖 JFileChooser 类的 getTypeDescrition 方法不会改变“类型”列中显示的类型信息。
    • 然后更改您的注册表(见上文)
    • 我扩展了 File 类并使用“createNewFile”方法创建了新文件,但创建的文件都不是“通用类型”
    【解决方案3】:

    我认为在 Java 中覆盖类型信息所要做的就是用自己的 FileSystemView 子类实例化 JFileChooser。

    • 子类 FileSystemView 到 MyFileSystemView

    • 覆盖 getSystemTypeDescription(文件 f)

    • 在您的特殊文件类型的覆盖中,返回您想要的任何内容,并通过使用超级调用返回值来返回默认值,否则

    • 使用以下原型之一实例化您的 FileChoosers,将您的自定义 MyFileSystemView 作为第二个参数

    JFileChooser(File currentDirectory, FileSystemView fsv)

    JFileChooser(String currentDirectoryPath, FileSystemView fsv)

    【讨论】:

    • 谢谢。由此,我能够解决问题。在 getSystemTypeDescription 上调用 super 不正常。但是创建一个空的 JFileChooser 并为 getTypeDescription 返回它的值解决了这个问题。
    猜你喜欢
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    相关资源
    最近更新 更多