Swing JFileChoser - Dateiname in Anführungszeichen

Neumi5694

Top Contributor
Hallo
In Windows gibt es ja die berühmte Funktion "Als Dateinamen kopieren", als nächstes hat man dann den vollen Dateinamen im Zwischenspeicher und kann ihn weiterverwenden.

Wenn ich den aber in einen JFileChoser einfüge, ohne die Anführungszeichen zu entfernen, erkennt dieser nicht, dass der Dateiname einen vollständigen Pfad beschreibt.
Beispiel:

Der Dateiname lautet
Code:
C:\Users\MyUser\Downloads\Testfile.xml"

(inklusive Anführungszeichen)

Wenn ich nun einen JFileChoser öffne und den Inhalt der Zwischenablage einfüge, dann wird der Dateiname verändert.
Java:
JFileChooser jfc = new JFileChooser("c:\\standardDir");
int result = jfc.showOpenDialog(aFrame);
//Hier wird nun der Inhalt der Zwischenablage eingefügt
if (result == JFileChooser.APPROVE_OPTION) {
        File theImportFile = jfc.getSelectedFile();
}
Der Dateiname von
Code:
theImportFile
lautet nun:
Code:
c:\standardDir\"C:\Users\MyUser\Downloads\Testfile.xml"

(also mit Anführungszeichen, was ok wäre, aber zusätzlich vorne noch dem Pfad, den der FileChoser grad  anzeigt)

Jetzt kann ich natürlich hinterher den Dateinamen verändern und ein neues File Objekt erstellen, aber das ist nicht Sinn der Sache. Gibt es eine Möglichkeit, den FileChoser dazu zu bringen, die eingefügten Anführungszeichen zu ignorieren?
Wenn man die beim Einfügen nämlich wegstreicht, passt alles.
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Gibt es eine Möglichkeit, den FileChoser dazu zu bringen, die eingefügten Anführungszeichen zu ignorieren?

Also mal davon abgesehen dass ich es komisch finden würde, würde mir spontan nur eine eher suboptimale Idee einfallen. Du könntest an dem Textfeld im Chooser ein DocumentFilter setzen, der alle Anführungszeichen rausfischt. Leider kommt man nicht ohne weiteres an das Textfeld, so das du über alle Komponenten iterieren müsstest (könnte hier klappen da es hoffentlich nur ein JTextField gibt).

Ala`
Java:
	public static void disableQuotionMarks(Container c) {
		Component[] cmps = c.getComponents();
		for (Component cmp : cmps) {
			if (cmp instanceof JTextField) {
				final AbstractDocument doc = (AbstractDocument) ((JTextField) cmp)
						.getDocument();
				doc.setDocumentFilter(new DocumentFilter() {
					@Override
					public void replace(FilterBypass fb, int offs, int length,
							String str, AttributeSet a)
							throws BadLocationException {
						super.replace(fb, offs, length, str.replace("\"", ""), a);
					}
				});
			}
			else if (cmp instanceof Container) {
				disableQuotionMarks((Container) cmp);
			}
		}
	}
Code:
disableQuotionMarks
musst du vorher aufrufen und dein FileChooser übergeben. Falls Nur Anführungszeichen am Anfang und Ende ignoriert werden sollen, müsst du die replace Methode entsprechend etwas abändern!
 
Zuletzt bearbeitet:

Neumi5694

Top Contributor
Quote: "Also mal davon abgesehen dass ich es komisch finden würde"

Naja, das ist die einzige Lösung, die mir dazu einfällt. Normalerweise akzeptieren Datei-Öffnen Boxen Pfad- und Dateinamen in Anführungszeichen als gegeben, der JFileChoser kommt aber auf die Idee, dass es toll wäre, davor noch einen Pfad reinzumurksen.

Wenn es eine andere Möglichkeit gibt, das zu verhindern, nehme ich die gerne an.


Wie dem auch sei, danke für den Tip, ich werde das mal ausprobieren.
 

Ähnliche Java Themen

Neue Themen


Oben