0

这段代码不是我自己的。学分:Java Swing – JFileChooser 示例

JFileChooser jfc = new JFileChooser(
    FileSystemView.getFileSystemView().getHomeDirectory());

请解释这行代码。我知道它是方法链接,但是FileSystem对象是否正确?

那么,该JFileChooser对象将FileSystemView具有两个链式方法的对象作为它的参数吗?

getFileSystemView()方法调用getHomeDirectory()方法吗?

FileChooser1

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());
        }
    }
}
4

1 回答 1

1

JFileChooser 类定义了多种类型的构造函数(构造函数重载)。构造方法之一是 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
于 2020-08-23T05:25:50.370 回答