Swing JFileChooser - Anzeige in Echtzeit filtern

Andi_CH

Top Contributor
Ich versuche mich gerade mit dem JFileChooser anzufreunden.

Mein Kunden wollen einen Pfad eingeben können - soweit kein Problem, aber die lieben Leute arbeiten gerne mit der Tastatur und geben den Pfad von Hand ein - auch das ist kein Problem, aber ich möchte die Anzeige fortlaufend anpassen - also bei jedem einzelnen Tastendruck.

Obere Hälfte des Bildes:
Nach Doppelklick auf "test" sollte im Feld Dateiname der Pfad immer mit einem / ergänzt sein um die Handeingabe zu erleichtern.

Untere Hälfte:
Es sollte nur noch "data" sichtbar sein, weil ein "d" eingebeben wurde.

Grenzen die beiden Vorstellungen an ein Reengineering des JFileChoosers oder kann ich das mit etwas weniger Aufwand realisieren? Wie denn konkret?


Falls es wem was bringt ;-)

Java:
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;

public class JFileChooserDemo {

	public static void main( String[] args ) {
		JFileChooser fc = new JFileChooser("/");
		fc.setDialogTitle("Pfadauswahl");
		fc.setName("Name");
		fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		fc.setFileFilter( new FileFilter() {
			@Override public boolean accept( File f ) {
				// tja - hier müsste die aktuelle Eingabe rein ...
				return true;
			}
			@Override public String getDescription() {
				return "Texte";
			}
		});
		while(true) {
			int state = fc.showOpenDialog( null );
			if ( state == JFileChooser.APPROVE_OPTION ) {
				System.out.println("getCurrentDirectory()   : " + fc.getCurrentDirectory());
				System.out.println("getSelectedFile()       : " + fc.getSelectedFile());
			} else {
				System.out.println( "Auswahl abgebrochen. State = " + state);
				System.exit( 0 );
			}
		}
	}
}
 

Anhänge

  • JFileChooser.png
    JFileChooser.png
    53,3 KB · Aufrufe: 50

KrokoDiehl

Top Contributor
Da der Dateidialog auch L&F-abhängig ist (beim Windows-L&F kommt der entsprechende Windows-Dateidialog welcher sich anders verhält als der Metal-Dialog), gehe ich mal davon aus, dass man nicht so tief in sein Verhalten eingreifen kann, zumindest auf keinen sauberen Weg.
 

Andi_CH

Top Contributor
Ich habe mich im Code beinahe verirrt aber trotzdem keinen Listener gefunden, den ich überschreiben könnte.
Einerseits ist es ja nahe am ewigen Thema "Keyboardlistener" - beliebiger Tastendruck abfangen, was ja bekanntlich nicht so einfach geht, aber andererseit ist doch die übliche Denkweise die, dass man sich auf Änderungen "abonnieren" kann.

Muss ich das jetzt wirklich mit Eingabefeld und JList selber bauen? (Mehr brauche ich genau gesehen gar nicht)
 
T

Tomate_Salat

Gast
Du könntest versuchen mittels Reflection an die Componenten zu kommen und so deinen Listener setzen. Wenn ich so den Source des choosers mir anschaue, scheint der rein in Java geschrieben zu sein. Also sollte es mal mindestens mit Reflection möglich sein.
 

Andi_CH

Top Contributor
Wozu Reflection? (Für mich ist das das absolute Horror-Ding)
Abgesehen davon: Wenn ich nicht weiss was ich suche bringt das rein gar nichts.

Wie gesagt, ich habe mich im Code verirrt ;-)
 
T

Tomate_Salat

Gast
Damit kommst du an private Felder. Ich hab den Code jz nicht studiert, aber ich gehe mal davon aus, dass die GUI-Elemente als private Felder zugänglich sind. Wenn du auf diese Zugriff hast, hast du auch die Möglichkeit die Anzeige zu manipulieren, wie du es möchtest.

Hab mich nicht so stark mit dem JFileChooser bisher auseinandergesetzt (die standard-sachen waren immer komplett ausreichend für mich), aber wenn es keinen "offiziellen"/"einfachen" Weg geben sollte, wäre Reflection eine Option.
 

Andi_CH

Top Contributor
Die Felder scheinen im MetalFileChooserUI (package javax.swing.plaf.metal; ) zu stecken, aber 1260 Zeilen Code :-( (Zähl mal die Komentarzeilen - den Code könnte man als schlechtes Beispiel hinstellen )

Da gibt es fileNameTextField, approveButton, cancelButton ...

Zum Thema reflection - wann da ja nur einer etwas ändert - z.B. den Namen eines privaten Feldes geht gar nichts mehr - tja

Ich glaube der Aufwand das neu und angepasst zu implementieren übersteigt das was ich zu investieren bereit bin.

Edit: Es ist wirklich der MetalFileChooser den ich "überschreiben" und dem JFileChooser "unterjubeln" müsste - kennt sich da jemand etwas genauer aus ob das überhaupt mit vertretbarem Aufwand möglich ist? Wieso wir der überhaupt verwendet?

----

Gehört wohl eher in die Beginners-Ecke, aber ist ja rein Interesse halber ...

Klassenname.this.xxx -> was bedeutet das

Java:
	public boolean isDirectorySelected() {
	    return MetalFileChooserUI.this.isDirectorySelected();
	}
 
Zuletzt bearbeitet:
T

Tomate_Salat

Gast
Zum Thema reflection - wann da ja nur einer etwas ändert - z.B. den Namen eines privaten Feldes geht gar nichts mehr - tja
Ist eben das Risiko daran.

Klassenname.this.xxx -> was bedeutet das

Sowas wird häufig in Anonymen Klassen verwendet:
Java:
class OuterClass {
    //.... 
    xyz = new InnerClass() {
         public String anything() {
               /*return*/ this.toString(); // ruft die toString von InnerClass auf
               return OuterClass.this.toString(); // ruft die toString von OuterClass auf;
         }
    };
}

Somit hast du die Möglichkeit aus der anonymen inneren Klasse felder und Methoden der äußeren Klasse aufzurufen.
 

Andi_CH

Top Contributor
Eine Frage oben habe ich sehr unpräzise gestellt: "Warum wird MetalFileChooserUI verwendet?"

Mich nimmt wunder was das Kriterium ist, dass man im Endeffekt bei dieser Klasse landet und ob ich es schaffe da eine andere (z.B. von MetalFileChooserUI abgeleitete) hinzustellen die dann verwendet wird?

Ich möchte die sozusagen überschreiben ohne das Ganze javax.swing.plaf.metal oder noch noch mehr, komplett neu zu bauen.
 

bERt0r

Top Contributor
Ich hab sowas schon mal versucht, mit Reflection, ohne Erfolg. Das Problem ist, der FileChooser verwendet ein sun.swing.FilePane auf welches man soweit ich noch weis keinen Zugriff hat. Da werden Security oder AccessRestriction Exceptions geworfen.
 

Kevin94

Top Contributor
Ich weiß, der Thread ruht schon ne Weile, aber warum setzt du nicht einfach einen FileFilter. Die Standart-Implementationen, sehen zwar nur eine Filterung nach Datei-Typ vor, das Interface selber ist aber so allgemein formuliert, dass die Dateien, nach wilkürlichen Kriterien aussortiert werden können.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
javampir Swing Anzeige der FileFilter im JFileChooser AWT, Swing, JavaFX & SWT 0
Tommy135 JFileChooser ist sehr langsam AWT, Swing, JavaFX & SWT 13
T JFileChooser ist Englisch und bleibt Englisch und bleibt Englisch... AWT, Swing, JavaFX & SWT 15
M Swing jFileChooser Header viewTypeDetails setFont AWT, Swing, JavaFX & SWT 0
I JFileChooser mit System L&F bei anderem L&F der eigtl. Anwendung AWT, Swing, JavaFX & SWT 0
Meeresgott AWT JFileChooser bestimmte Ordner anzeigen AWT, Swing, JavaFX & SWT 16
S Swing JFileChooser best. Ordner wie Dateien behandeln AWT, Swing, JavaFX & SWT 4
H Swing JFileChooser für nicht existierendes Unterverzeichnis AWT, Swing, JavaFX & SWT 3
L JFileChooser Datentyp Unterscheidung AWT, Swing, JavaFX & SWT 6
K JFileChooser NullPointerException AWT, Swing, JavaFX & SWT 7
H JFileChooser Dateinamen vorgeben (Save Dialog) AWT, Swing, JavaFX & SWT 9
Neumi5694 Swing JFilechooser - Detailansicht AWT, Swing, JavaFX & SWT 0
M JFileChooser Look and Feel AWT, Swing, JavaFX & SWT 2
T JFileChooser Rahmenfarbe ändern AWT, Swing, JavaFX & SWT 1
K Pfad mit JFileChooser ausgeben lassen AWT, Swing, JavaFX & SWT 7
C JFileChooser hängt bei Ausführung mit Terminal AWT, Swing, JavaFX & SWT 2
T Swing JFileChooser und FileView AWT, Swing, JavaFX & SWT 4
M Einzelne Ordner im JFileChooser ausgrauen? AWT, Swing, JavaFX & SWT 4
H Swing JFileChooser inline editing AWT, Swing, JavaFX & SWT 4
D JFileChooser anpassen AWT, Swing, JavaFX & SWT 5
AssELAss Verzeichnis JFileChooser aktualisieren AWT, Swing, JavaFX & SWT 0
A JFileChooser Datei speichern AWT, Swing, JavaFX & SWT 4
A Datei weiterverwenden mit JFileChooser AWT, Swing, JavaFX & SWT 6
T Importer-Auswahl im JFileChooser AWT, Swing, JavaFX & SWT 3
N JFileChooser bzw. FileDialog Problem AWT, Swing, JavaFX & SWT 10
A Swing JFileChooser - Größenänderung nach Aufruf von showOpenDialog() AWT, Swing, JavaFX & SWT 15
D Serverdirectory auf Client browsen mit JFileChooser AWT, Swing, JavaFX & SWT 7
F icon aus exe auslesen mithilfe des JFilechooser ? AWT, Swing, JavaFX & SWT 4
C JFileChooser und Netzwerk Laufwerke AWT, Swing, JavaFX & SWT 4
Iron Monkey JFileChooser - Drag and Drop AWT, Swing, JavaFX & SWT 5
J JFileChooser - Datei speichern AWT, Swing, JavaFX & SWT 7
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
P JFileChooser mit verschidene Endungen AWT, Swing, JavaFX & SWT 12
S Swing Ordner im JFileChooser auswählen AWT, Swing, JavaFX & SWT 2
C JFileChooser bringt parent durcheinander AWT, Swing, JavaFX & SWT 2
N JFileChooser mit Dateinamenvorgabe AWT, Swing, JavaFX & SWT 9
S JFileChooser GTK (Ubuntu) "hässlich" AWT, Swing, JavaFX & SWT 2
A Swing JFileChooser mit modifiziertem Kontextmenü AWT, Swing, JavaFX & SWT 4
S JFileChooser öffnet den falschen Ordner AWT, Swing, JavaFX & SWT 4
A Swing JFilechooser zeigt verzeichnisse nicht an AWT, Swing, JavaFX & SWT 2
M JFileChooser umbenennen verbieten AWT, Swing, JavaFX & SWT 4
Helgon JFileChooser öffnet sich 2x AWT, Swing, JavaFX & SWT 12
K JFileChooser mit Zusatzfunktionen AWT, Swing, JavaFX & SWT 8
GUI-Programmer JFilechooser, mehrere Datein selektieren und Reihenfolge (2) AWT, Swing, JavaFX & SWT 8
V JFileChooser auf Mac und Netzwerkordner AWT, Swing, JavaFX & SWT 2
B JFileChooser breite der Spalten? AWT, Swing, JavaFX & SWT 5
M JFileChooser setCurrentDirectory() - Verzeichnis relativ zum Code/binary AWT, Swing, JavaFX & SWT 14
P Swing Dateinamen im JFileChooser vorschlagen AWT, Swing, JavaFX & SWT 11
M JFileChooser Abfangen des DateiTypen möglich?? AWT, Swing, JavaFX & SWT 5
T Swing JFileChooser --> Desktop und Laufwerke im "Suchen in" - Drop Down AWT, Swing, JavaFX & SWT 3
N JFileChooser - Keine Funtkion AWT, Swing, JavaFX & SWT 13
T JFileChooser - "Öffnen-Button" aktivieren/deaktivieren möglich??? AWT, Swing, JavaFX & SWT 2
jueki Aktuell eingestellten Filter aus einem JFileChooser abfragen. AWT, Swing, JavaFX & SWT 5
F Swing JFileChooser - Dateinamen nicht editierbar machen AWT, Swing, JavaFX & SWT 8
I Fehler bei JFileChooser AWT, Swing, JavaFX & SWT 2
K JFileChooser mehrere Dateien markieren ohne STRG AWT, Swing, JavaFX & SWT 4
Ivan Dolvich [Linux] JFileChooser sieht komisch aus... AWT, Swing, JavaFX & SWT 12
M Zurück-Button in JFileChooser AWT, Swing, JavaFX & SWT 9
N JFileChooser AWT, Swing, JavaFX & SWT 4
D Problem mit JFileChooser -> Daten werden mit anführungsstriche in JTable geschrieben AWT, Swing, JavaFX & SWT 8
S JFileChooser Dateiname Autovervollständigung AWT, Swing, JavaFX & SWT 2
B JDialog über JFileChooser anzeigen AWT, Swing, JavaFX & SWT 6
I Swing JFileChooser '\' im Pfad... AWT, Swing, JavaFX & SWT 2
K Swing JFileChooser zum Speichern - FileFilter AWT, Swing, JavaFX & SWT 2
M Swing Execption beim JFileChooser AWT, Swing, JavaFX & SWT 4
kodela Swing JFileChooser und die Datei-Extension AWT, Swing, JavaFX & SWT 3
jueki eigenen Button in JFileChooser einfügen AWT, Swing, JavaFX & SWT 7
alderwaran jFileChooser showSaveDialog, dateinamen werden mit pfadnamen überschrieben beim navigieren AWT, Swing, JavaFX & SWT 1
B Swing Suche JFileChooser zum Speichern AWT, Swing, JavaFX & SWT 2
Iron Monkey JFileChooser DIRECTORIES_ONLY AWT, Swing, JavaFX & SWT 4
Semox Swing JFileChooser: Problem Approve oder Cancel abzufangen AWT, Swing, JavaFX & SWT 7
H JTree - nach Auswahl aus JFileChooser wird nur der erste Knoten angezeigt AWT, Swing, JavaFX & SWT 3
kodela Sicherheitsabfrage mit JFileChooser AWT, Swing, JavaFX & SWT 2
DARK_ZERATO2 jFileChooser AWT, Swing, JavaFX & SWT 4
G JFileChooser Problem AWT, Swing, JavaFX & SWT 4
G Swing JFileChooser Event für neue Directory? AWT, Swing, JavaFX & SWT 5
P JFileChooser AWT, Swing, JavaFX & SWT 2
M Swing JFileChooser und JFrame AWT, Swing, JavaFX & SWT 5
G Swing JFileChooser in einem JPanel? AWT, Swing, JavaFX & SWT 3
J JFileChooser Dateiauswahl beim Tippen einschränken AWT, Swing, JavaFX & SWT 3
M Swing JFileChooser mit Windows 7 AWT, Swing, JavaFX & SWT 8
R JFileChooser - Initiales Verzeichnis auswählen AWT, Swing, JavaFX & SWT 8
brainray JFileChooser - es sollen nur Ordner wählbar sein AWT, Swing, JavaFX & SWT 2
T JFileChooser Problem AWT, Swing, JavaFX & SWT 3
N Mit JFileChooser ein Verzeichnis auswählen AWT, Swing, JavaFX & SWT 7
M Swing JFileChooser und versteckte Ordner AWT, Swing, JavaFX & SWT 2
F jFileChooser verwenden AWT, Swing, JavaFX & SWT 4
M Swing ImageIcon über JFileChooser einbinden AWT, Swing, JavaFX & SWT 4
F JFileChooser mal wieder AWT, Swing, JavaFX & SWT 2
ARadauer Swing JFileChooser mit Bildvorschau AWT, Swing, JavaFX & SWT 5
H Swing Dateiauswahldialog mit JFileChooser funktioniert unzuverlässig AWT, Swing, JavaFX & SWT 11
G Swing JFileChooser nur in Verzeichnis+Unterverzeichnisse AWT, Swing, JavaFX & SWT 5
K Swing JFileChooser AWT, Swing, JavaFX & SWT 6
M JFileChooser einschränken AWT, Swing, JavaFX & SWT 3
L JFileChooser braucht lang zum öffnen AWT, Swing, JavaFX & SWT 2
S NullPointerException bei JFileChooser AWT, Swing, JavaFX & SWT 8
M JFilechooser defaultdirectory AWT, Swing, JavaFX & SWT 5
C JFilechooser this.setAlwaysOnTop AWT, Swing, JavaFX & SWT 2
G JFileChooser - erkennen v. existierenden Dateien ohne Endung AWT, Swing, JavaFX & SWT 1
N JFilechooser File auslesen AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben