2011-03-07 156 views
3

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

回答

1
+0

NO,类 '文件查看' 方法不改变 “类型” 列'JFileChooser'中的值。 – Joe 2011-03-07 15:25:57

+0

+1,@Joe,如果你重写该方法,那么我相信你可以返回你想要的任何“描述”。但是我会覆盖JFileChooser上的方法,而不是FileView。 – camickr 2011-03-07 15:57:41

+0

号我试过了,'JFileChooser''Type'列完全没有受到FileView的类型描述方法的影响。 – Joe 2011-03-07 16:02:08

0
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中的

IrfanView的JPG文件

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

+0

是的,你是对的。问题是,在你的例子中“f.jpg”是一个真正的文件。 “类型”名称的计算形式多于文件扩展名。例如,如果您只是创建了一个名称,如“Bubba.jpg”,则类型描述将为“Generic Type”。我希望看到什么课程实际计算出“类型”值。 JFileChooser没有“setTypeDescription方法,并且在FileView中设置类型不会改变或修改JFileChooser类型列中的类型描述 – Joe 2011-03-07 17:09:20

+0

不,它不会查看文件;我可以创建0字节文件(例如使用记事本),命名为“f.jpg”,运行我的程序,它会显示“IrfanView JPG文件”。正如我所说,它根据扩展名(例如“jpg”)在注册表(HKEY_CLASSES_ROOT)中查找此信息。 – 2011-03-07 17:26:21

+0

只做了一个快速测试,覆盖了JFileChooser类的getTypeDescrition方法,并不会在“Details View”中更改“Type”列中显示的Type信息。 – Joe 2011-03-07 17:33:56

0

我认为你必须做的重写Java中的类型信息是用你自己的FileSystemView的子类实例化JFileChooser。

  • 子类的FileSystemView到MyFileSystemView

  • 覆盖getSystemTypeDescription(文件F)

  • 在overrride为任何你想要的和返回值返回默认值的特殊文件类型回报

    从使用超级呼叫,否则

  • 实例化您的FileChoosers与以下原型之一,将您的自定义MyFileSystemView作为第二个argum耳鼻喉科

的JFileChooser(文件currentDirectory所,的FileSystemView FSV)

的JFileChooser(字符串currentDirectoryPath,的FileSystemView FSV)

+0

谢谢。由此,我能够解决这个问题。在getSystemTypeDescription上调用super是不行的。但是创建一个空的JFileChooser并为getTypeDescription返回它的值解决了这个问题。 – Joe 2011-03-08 20:29:33