18

これを行う簡単な方法があるはずだと思いますが、わかりません。ユーザーがディレクトリを選択できる JFileChooser があります。ディレクトリ内のすべてのファイルを表示してユーザーにコンテキストを提供したいのですが、ディレクトリのみを選択として受け入れる必要があります (ファイルを選択すると、[開く] ボタンが無効になる可能性があります)。これを行う簡単な方法はありますか?

4

9 に答える 9

18

私の解決策は、camickr と Trashgod の回答をマージすることです。

    final JFileChooser chooser = new JFileChooser() {
            public void approveSelection() {
                if (getSelectedFile().isFile()) {
                    return;
                } else
                    super.approveSelection();
            }
    };
    chooser.setFileSelectionMode( JFileChooser.FILES_AND_DIRECTORIES );
于 2010-05-21T16:21:36.817 に答える
14

ファイル チューザーの使用方法を参照setFileSelectionMode()してください。

setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY)

補遺: this の 73 行目のコメントを外すことで効果を確認できますがFileChooserDemo、プラットフォームに依存しているようです。

補遺: を使用している場合FILES_AND_DIRECTORIESは、それに応じてボタンのテキストを変更することを検討してください。

chooser.setApproveButtonText("Choose directory");

効果は L&F に依存するDIRECTORIES_ONLYため、UI 要件を既に満たしているプラ​​ットフォームでの使用を検討してください。

if (System.getProperty("os.name").startsWith("Mac OS X")) {
    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
} else {
    chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
}
于 2010-05-21T15:55:48.623 に答える
13

approvalSelection() メソッドをオーバーライドします。何かのようなもの:

JFileChooser chooser = new JFileChooser( new File(".") )
{
    public void approveSelection()
    {
        if (getSelectedFile().isFile())
        {
            // beep
            return;
        }
        else
            super.approveSelection();
    }
};
于 2010-05-21T15:49:39.480 に答える
2

オーバーライドの解決策はapproveSelection、特定のユーザーにとって煩わしい場合があります。

場合によっては、ユーザーが理由もなくディレクトリ内のファイルをクリックすることがあります (ファイルではなくディレクトリを選択したい場合でも)。その場合、ユーザーは ファイルの選択を解除しても失敗するJFileChooserため、(一種の) で立ち往生します。approveSelectionこの煩わしさを避けるために、これが私がしていることです:

JFileChooser fileChooser = new JFileChooser();

fileChooser.setFileSelectionMode(
        JFileChooser.FILES_AND_DIRECTORIES);

int option = fileChooser.showDialog(null,
        "Select Directory");

if (option == JFileChooser.APPROVE_OPTION) {
    File f = fileChooser.getSelectedFile();
    // if the user accidently click a file, then select the parent directory.
    if (!f.isDirectory()) {
        f = f.getParentFile();
    }
    System.out.println("Selected directory for import " + f);
}

ユーザーがファイルを選択した場合でも、ディレクトリを選択すると、私の意見では使いやすさが向上します。

于 2013-05-02T18:38:24.717 に答える
1

AFAIK JFileChooser は、ファイル フィルタリング (表示できるもの、非常に構成可能なもの) を選択フィルタリング (選択できるもの) から分離します。

選択フィルタリングの構成ははるかに制限されていますが、知る限り、ディレクトリのみまたはファイルのみをsetFileSelectionMode()で選択できるようにすることができます

于 2010-05-21T15:49:22.460 に答える
-1

最善の解決策は、ユーザーがファイルまたはディレクトリを選択できるようにすることだと思います。ユーザーがファイルを選択した場合は、そのファイルが置かれているディレクトリを使用するだけです。

于 2010-05-21T15:49:32.740 に答える