これを行う簡単な方法があるはずだと思いますが、わかりません。ユーザーがディレクトリを選択できる JFileChooser があります。ディレクトリ内のすべてのファイルを表示してユーザーにコンテキストを提供したいのですが、ディレクトリのみを選択として受け入れる必要があります (ファイルを選択すると、[開く] ボタンが無効になる可能性があります)。これを行う簡単な方法はありますか?
9 に答える
私の解決策は、camickr と Trashgod の回答をマージすることです。
final JFileChooser chooser = new JFileChooser() {
public void approveSelection() {
if (getSelectedFile().isFile()) {
return;
} else
super.approveSelection();
}
};
chooser.setFileSelectionMode( JFileChooser.FILES_AND_DIRECTORIES );
ファイル チューザーの使用方法を参照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);
}
approvalSelection() メソッドをオーバーライドします。何かのようなもの:
JFileChooser chooser = new JFileChooser( new File(".") )
{
public void approveSelection()
{
if (getSelectedFile().isFile())
{
// beep
return;
}
else
super.approveSelection();
}
};
オーバーライドの解決策は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);
}
ユーザーがファイルを選択した場合でも、ディレクトリを選択すると、私の意見では使いやすさが向上します。
AFAIK JFileChooser は、ファイル フィルタリング (表示できるもの、非常に構成可能なもの) を選択フィルタリング (選択できるもの) から分離します。
選択フィルタリングの構成ははるかに制限されていますが、知る限り、ディレクトリのみまたはファイルのみをsetFileSelectionMode()で選択できるようにすることができます
最善の解決策は、ユーザーがファイルまたはディレクトリを選択できるようにすることだと思います。ユーザーがファイルを選択した場合は、そのファイルが置かれているディレクトリを使用するだけです。