Ich versuche, einen JFileChooser
Dialog zu öffnen, um den Benutzer sein Wunschverzeichnis für die folgenden Operationen entscheiden zu lassen.JFileChooser-Verhalten verstehen
Folgende ist mein aktueller Code:
JFileChooser chooser;
if(pref.get("LAST_PATH", "") != null){
chooser = new JFileChooser(pref.get("LAST_PATH", ""));
} else{
chooser = new JFileChooser(home_dir);
}
//chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setAcceptAllFileFilterUsed(false);
int retVal = chooser.showOpenDialog(frame);
System.out.println("getCurrentDirectory(): " + chooser.getCurrentDirectory().toString());
home_dir ein statischer String ist herunterladen-Verzeichnis für die Benutzer zeigen.
Das Verhalten Ich verstehe nicht:
home_dir = C:/Users/Scy/Downloads
Drücken Sie OK, ohne eine Datei auswählen (oder das Verzeichnis)
Output: C:/Users/Scy
home_dir = C:/Users/Scy/Downloads
Auswahl einer beliebigen Datei innerhalb Downloads
Output: C:/Users/Scy/Downloads
Warum erhalte ich nicht den vollständigen Pfad (C:/Users/Scy/Downloads
) als Ausgabe, wenn ich nichts auswähle und nur OK drücke? (Mit DIRECTORIES_ONLY
aktiviert, kann nicht OK drücken, ohne eine Auswahl ohne DIRECTORIES_ONLY
)
Edit: Ich habe gerade bemerkt, dass, wenn ich drücken Sie einfach auf die Schaltfläche Abbrechen, ohne eine Auswahl der Ausgang in der Tat ist das, was ich erwarte, C:/Users/Scy/Downloads
.
Auf der Grundlage einer Antwort auf diesen Beitrag habe ich versucht, die folgenden:
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File(home_dir)); //home_dir = "C:/Users/Scy/Downloads"
Das Ergebnis war genau das gleiche wie oben. Wenn Sie auf die Schaltfläche Abbrechen klicken, wird die vollständige Pfadausgabe angezeigt, während OK/Übernehmen die Ergebnisse in C:/Users/Scy
anzeigt.
"Wählen Sie eine beliebige Datei in Downloads Ausgabe: C:/Benutzer/Scy/Downloads" Hier ist ich durch Ihre Frage verwirrt. Wenn Sie eine ** Datei ** in einem Verzeichnis auswählen, sollte 'getParentDirectory()' den Namen dieses Verzeichnisses zurückgeben. Was erwartest du sonst noch? Noch wichtiger, welches Verhalten willst du **? –
Wo verwende ich 'getParentDirectory()'? 'getCurrentDirectory()' gibt das übergeordnete Verzeichnis jeder Datei zurück, die ich hineingelegt habe. Wenn Sie also ein Verzeichnis oder genauer gesagt "C:/Users/Scy/Downloads" auswählen, wird "C:/Users/Scy" angezeigt, während "C:/Users/Scy/Downloads" angezeigt werden muss, da dies das aktuelle Verzeichnis ist. –