Ich habe das Gefühl, dass es eine einfache Möglichkeit geben sollte, dies zu tun, aber ich kann es nicht herausfinden. Ich habe einen JFileChooser, der dem Benutzer erlaubt, Verzeichnisse zu wählen. Ich möchte alle Dateien in den Verzeichnissen anzeigen, um dem Benutzer einen Kontext zu geben, aber nur Verzeichnisse sollten als Auswahl akzeptiert werden (vielleicht wäre die Schaltfläche Öffnen bei der Auswahl einer Datei deaktiviert). Gibt es eine einfache Möglichkeit, dies zu tun?JFileChooser Verzeichnis auswählen, aber Dateien anzeigen
Antwort
Überschreiben Sie die approveSelection() -Methode. Etwas wie:
JFileChooser chooser = new JFileChooser(new File("."))
{
public void approveSelection()
{
if (getSelectedFile().isFile())
{
// beep
return;
}
else
super.approveSelection();
}
};
AFAIK JFileChooser trennt Dateifilterung (was angezeigt werden kann, sehr konfigurierbar) von Auswahlfilterung (was ausgewählt werden kann).
Die Konfiguration der Auswahl Filterung ist wesentlich eingeschränkt, aber AFAIK können Sie nur Verzeichnisse oder Dateien nur erlauben, wählen mit setFileSelectionMode()
ausgewählt werden Ich denke, die beste Lösung nur, damit der Benutzer entweder eine wählen Datei oder ein Verzeichnis. Und wenn der Benutzer eine Datei auswählt, verwenden Sie einfach das Verzeichnis, in dem sich diese Datei befindet.
Siehe setFileSelectionMode()
in How to Use File Choosers:
setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY)
Nachtrag: Der Effekt kann durch Auskommentierung Linie 73 dieser FileChooserDemo
sehen werden, aber es scheint, plattformabhängig zu sein.
Nachtrag: Wenn FILES_AND_DIRECTORIES
verwenden, sollten Sie entsprechend den Button Text ändern:
chooser.setApproveButtonText("Choose directory");
Da die Wirkung ist L & F abhängig, betrachten DIRECTORIES_ONLY
auf Plattformen, die bereits Ihre UI Anforderungen erfüllen:
if (System.getProperty("os.name").startsWith("Mac OS X")) {
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
} else {
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
}
Aber das wird Dateien verstecken, was er nicht will. –
@mmyers: Es zeigt die Dateien in grau in dem oben genannten Beispiel. YMMV – trashgod
Von dem, was das Tutorial sagt, es scheint, dass es laf-abhängig ist. –
Meine Lösung ist eine Zusammenführung zwischen den Antworten von camickr und trashgod:
final JFileChooser chooser = new JFileChooser() {
public void approveSelection() {
if (getSelectedFile().isFile()) {
return;
} else
super.approveSelection();
}
};
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
+1 Sieht aus als wäre ich in guter Gesellschaft! Ich habe meine Antwort aktualisiert, um diesen kombinierten Ansatz widerzuspiegeln. – trashgod
Sehr gut! 'JFileChooser.FILES_AND_DIRECTORIES' ist ** wichtig **! Ohne sie ist (wie in Camickrs Antwort) die Lösung ** nutzlos **, wie ich getestet habe. –
Die Lösung des Überschreibens approveSelection
kann für bestimmte Benutzer lästig sein.
Manchmal klickt ein Benutzer ohne Grund auf eine Datei in einem Verzeichnis (obwohl sie das Verzeichnis und nicht die Datei auswählen möchte). Wenn das passiert, wäre der Benutzer (Art-a) in der JFileChooser
fest, wie die approveSelection
wird fehlschlagen, auch wenn sie die Datei abwählen. Um diesen Ärger zu vermeiden, das ist, was ich tue:
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);
}
das Verzeichnis auswählen, auch wenn der Benutzer eine Datei führt zu einer besseren Bedienbarkeit meiner Meinung nach ausgewählt.
Halten Sie die fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY)
und Verwendung:
File[] selectedFiles = fileChooser.getSelectedFile().listFiles();
- 1. QFileDialog Ordner und Dateien anzeigen, aber nur Ordner auswählen?
- 2. JFileChooser zum Auswählen mehrerer Textdateien und Vergleichen
- 3. Hinzufügen mehrerer Dateien mit JFileChooser
- 4. JFileChooser zeigt keine Dateien mit Filter
- 5. Mulitype Auswahl JFileChooser
- 6. HTML: mehrere Dateien auswählen, aber keine Dateinamen angezeigt?
- 7. Dateitypen mit JFileChooser filtern
- 8. machen jfilechooser zeigen Bild Thumbnails
- 9. JFileChooser Icons auf 2K Displays
- 10. JFileChooser ändern Standardverzeichnis in Windows
- 11. XCode 4.3.2 versteckte Dateien anzeigen
- 12. Funktionen anzeigen, Verzeichnis durchsuchen Verstecken
- 13. Dateien im Verzeichnis löschen
- 14. Unix Befehl, um alle Dateien in einem Verzeichnis zu löschen, aber das Verzeichnis zu behalten
- 15. Auswählen von Dateien in Kolben
- 16. JFileChooser - mehrere Dateifilter?
- 17. JFileChooser mit Bestätigungsdialog
- 18. Ausgewählte Datei löschen JFileChooser
- 19. Überschreiben JFileChooser Java
- 20. JFileChooser hängt manchmal
- 21. JFileChooser eingebettet in ein JPanel
- 22. Fehlende Dateien in einem Verzeichnis auflisten und zusätzliche Dateien löschen
- 23. 3 Tabellen mit JOIN auswählen, aber 4 nicht auswählen?
- 24. CSS alle auswählen, einige, aber nicht alle Elemente auswählen?
- 25. CTP-Dateien als PHP-Dateien in PHPStorm anzeigen
- 26. Alle Dateien standardmäßig anzeigen
- 27. Versteckte Dateien anzeigen Befehl
- 28. Zusammengeführte PDF-Dateien anzeigen
- 29. jQuery Mobile Anzeigen ausgeblendet Element auswählen
- 30. Wie kann ich mit NSSavePanel ein Verzeichnis auswählen?
eher schlecht UX. –