问题描述
此代码不是我自己的。信用:Java Swing – JFileChooser example
@H_502_3@JFileChooser jfc = new JFileChooser( FileSystemView.getFileSystemView().getHomeDirectory());
请解释这一行代码。我知道它是方法链接,但是@H_502_3@FileSystem是否在对象正确的位置?
那么,@H_502_3@JFileChooser对象将带有两个链接方法的@H_502_3@FileSystemView对象作为参数吗?
@H_502_3@getFileSystemView()方法正在调用@H_502_3@getHomeDirectory()方法吗?
@H_502_3@FileChooser1
@H_502_3@package com.mkyong.jfileChooser; import java.io.File; import javax.swing.JFileChooser; import javax.swing.filechooser.FileSystemView; public class FileChooser1 { public static void main(String[] args) { JFileChooser jfc = new JFileChooser( FileSystemView.getFileSystemView().getHomeDirectory());//<--p int returnValue = jfc.showOpenDialog(null); // int returnValue = jfc.showSaveDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { File selectedFile = jfc.getSelectedFile(); System.out.println(selectedFile.getAbsolutePath()); } } }
解决方法
JFileChooser类定义了多种类型的构造函数(Constructor Overloading)。 构造函数方法之一是JFileChooser(File),它将File对象值作为参数。
在您的代码中,JFileChooser实例是使用表示主目录作为参数的File对象实例创建的。
FileSystemView是带有getFileSystemView静态方法的类,用于返回FileSystemView的实例(因此称为工厂方法,类似于生产某种产品的工厂)。 FileSystemView类型对象中有一个名为getHomeDirectory()的方法,该方法将返回一个File对象,该对象是主目录的抽象。 总结以下代码行:
JFileChooser jfc = new JFileChooser(
FileSystemView.getFileSystemView().getHomeDirectory());
您正在使用构造函数类型JFileChooser(File)实例化JFileChooser的实例,而不是显式传递File值,而是调用FileSystemView方法以返回将作为参数传递给JFileChooser构造函数的值。
相同的代码可以编写如下
FileSystemView fileSystemView = FileSystemView.getFileSystemView();
File file = fileSystemView.getHomeDirectory();
JFileChooser jfc = new JFileChooser(file);//<--p