Java Swing - JFileChooserの例

Java Swing – JFileChooserの例

JFileChooserは、ファイルまたはファイルの保存場所を選択するようにユーザーに促すすばやく簡単な方法です。 以下は、このクラスの使用方法の簡単な例です。

JFileChooserには6つのコンストラクターがあります。

  • JFileChooser() –ユーザーのデフォルトディレクトリを指す空のコンストラクタ

  • JFileChooser(String) –指定されたパスを使用します

  • JFileChooser(File) –指定されたファイルをパスとして使用します

  • JFileChooser(FileSystemView) –指定されたFileSystemViewを使用します

  • JFileChooser(String, FileSystemView) –指定されたパスとFileSystemViewを使用します

  • JFileChooser(File, FileSystemView) –指定された現在のディレクトリとFileSystemViewを使用します

JFileChooserコンストラクターを呼び出すためのすべての異なる方法

//JFileChooser jfc;
//String path = "C:\\Users\\Public";
//File file = new File("C:\\Users\\Public");
//FileSystemView fsv = FileSystemView.getFileSystemView();

//jfc = new JFileChooser();
//jfc = new JFileChooser(path);
//jfc = new JFileChooser(file);
//jfc = new JFileChooser(fsv);
//jfc = new JFileChooser(path, fsv);
//jfc = new JFileChooser(file, fsv);

ライターの個人的な好みは、FileSystemViewを考慮に入れることです。 以下の例では、FileSystemView.getFileSystemView()を使用しており、getHomeDirectory()を介してホームディレクトリをポイントしています。 そのプロセスは、ファイルタイプになります。 つまり、FileSystemViewを考慮しながら、コンストラクターJFileChooser(File)を使用しています。

1. show * Dialog()–Open or save a file

JFileChooserを使用して、ユーザーが開きたいファイルの絶対パスを取得する方法、またはユーザーがファイルを保存する場所を取得する方法の例:

FileChooser1.java

package com.example.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());

        int returnValue = jfc.showOpenDialog(null);
        // int returnValue = jfc.showSaveDialog(null);

        if (returnValue == JFileChooser.APPROVE_OPTION) {
            File selectedFile = jfc.getSelectedFile();
            System.out.println(selectedFile.getAbsolutePath());
        }

    }

}

2つのメソッドshowOpenDialog()showSaveDialog()は類似していることに注意してください。違いを生むのは、開発者がそれぞれを処理する方法です。 読みやすくするため、2つの方法を混在させることはお勧めしません。

出力:

swing-jfilechooser-4a

ユーザーがディレクトリに移動すると、ファイルを選択して「開く」をクリックします

swing-jfilechooser-4b

出力:

C:\Users\Public\Pictures\pollock.she-wolf.jpg

2. setFileSelectionMode(int)–Select files or directories

この方法では、ユーザーがディレクトリのみ(JFileChooser.DIRECTORIES_ONLY)またはファイルのみ(JFileChooser.FILES_ONLY)またはファイルとディレクトリ(JFileChooser.FILES_AND_DIRECTORIES)のいずれかを選択するように制限できます。 デフォルトはFILES_ONLYです。 JFileChooser.DIRECTORIES_ONLYを実装する例を次に示します。

FileChooser2.java

package com.example.jfileChooser;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;

public class FileChooser2 {

    public static void main(String[] args) {

        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
        jfc.setDialogTitle("Choose a directory to save your file: ");
        jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

        int returnValue = jfc.showSaveDialog(null);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            if (jfc.getSelectedFile().isDirectory()) {
                System.out.println("You selected the directory: " + jfc.getSelectedFile());
            }
        }

    }

}

出力:

swing-jfilechooser-4c

You selected the directory: C:\Users\Public\Pictures

3. setMultiSelectionEnabled(Boolean)–Allow multiple selections

複数選択が有効になっている例。 ユーザーが複数のファイルを選択すると、プログラムは名前を出力します。

FileChooser3.java

package com.example.jfileChooser;

import java.io.File;
import java.util.Arrays;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;

public class FileChooser3 {

    public static void main(String[] args) {

        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
        jfc.setDialogTitle("Multiple file and directory selection:");
        jfc.setMultiSelectionEnabled(true);
        jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

        int returnValue = jfc.showOpenDialog(null);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            File[] files = jfc.getSelectedFiles();
            System.out.println("Directories found\n");
            Arrays.asList(files).forEach(x -> {
                if (x.isDirectory()) {
                    System.out.println(x.getName());
                }
            });
            System.out.println("\n- - - - - - - - - - -\n");
            System.out.println("Files Found\n");
            Arrays.asList(files).forEach(x -> {
                if (x.isFile()) {
                    System.out.println(x.getName());
                }
            });
        }

    }

}

出力:

swing-jfilechooser-4d

Directories found

Camera Roll
Saved Pictures

- - - - - - - - - - -

Files Found

autumn_rhythm-pollock1.jpg
kuNUfO.jpg
mona.jpg

4. フィルタ–Limit the set of files shown to the user

ユーザーの選択をプログラムのニーズに制限することは常に便利です。 たとえば、プログラムでpngおよびgif画像が必要な場合、ユーザーの選択をそれだけに制限することをお勧めします。 以下の例は、カスタムFileNameExtensionFilterを使用してそれを実現する方法を示しています。

FileChooser4.java

package com.example.jfileChooser;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileSystemView;

public class FileChooser4 {

    public static void main(String[] args) {

        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
        jfc.setDialogTitle("Select an image");
        jfc.setAcceptAllFileFilterUsed(false);
        FileNameExtensionFilter filter = new FileNameExtensionFilter("PNG and GIF images", "png", "gif");
        jfc.addChoosableFileFilter(filter);

        int returnValue = jfc.showOpenDialog(null);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            System.out.println(jfc.getSelectedFile().getPath());
        }

    }

}

出力:

swing-jfilechooser-4e

ご覧のとおり、ユーザーは他のものを選択することはできません。 上記のディレクトリには他の種類の画像も含まれていますが、ユーザーにはgifとpngのみが表示されます。

ディレクトリは次のようになります。

swing-jfilechooser-4f

5. showDialog()の使用

承認ボタンをカスタマイズする必要がある場合は、showDialog()メソッドを使用します。 使用方法の例を次に示します。

FileChooser5.java

package com.example.inputDialog;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;

public class FileChooser5 {

    public static void main(String[] args) {

        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
        jfc.setDialogTitle("Custom button");

        int returnValue = jfc.showDialog(null, "A button!");
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            System.out.println(jfc.getSelectedFile().getPath());
        }

    }

}

出力:

swing-jfilechooser-4g

Note
JFileChooserにはsetApproveButtonText(String)というメソッドがあります。 このメソッドの問題は、showOpenDialog()に対してのみ機能することです。 カスタムボタンが必要な場合は、showSaveDialog()の代わりにshowDialog()を使用することをお勧めします。

また、ファイルを読み書きするための最も簡単で最も一般的な方法を確認する必要があります。