JFileChooser: das *.* Problem

Status
Nicht offen für weitere Antworten.

Helian

Mitglied
Hallo Leute,

habe folgendes Problem: ein FileChooser mit diversen FileFiltern(nur für zip-files und tar-files). Die Filter funktionieren prima, aber wenn ich direkt in der TextBox *.* eingebe, nützt der beste Filter nichts und es werden alle Dateien angezeigt. Gibt es nun also eine Methode direkt auf dieses Textfeld zuzugreifen und die Eingabe generell bzw. *.* zu verhindern?

(So nach dem Muster: FileChooser.TextField.disabled = true...)
 

Sky

Top Contributor
Mir fällt spontan nix ein, wie man es "direkt" machen könnte. Aber evtl. kann man das Verhalten mittels "PropertyChangeListener" abfangen und beeinflussen.
 

thE_29

Top Contributor
Mit ein bisi rumgetrickse geht das :)


Code:
JFileChooser f = new JFileChooser();
//blabla die Einstellungen

//vor dem showOpenDialog(...)
((JTextField)((JComponent)((JComponent)f.getComponent(2)).getComponent(0)).getComponent(1)).setEnabled(false);


Das sollte das disablen :)

So, kann man eigentlich den kompletten Dialog verändern wie es einem gefällt :) Hab ich schon paar mal gemacht (man könnte auch Buttons disablen,umbenennen, etc)
 

thE_29

Top Contributor
Nachtrag:

So schauts viel schöner aus :)

Code:
    ((JLabel)((JComponent)((JComponent)f.getComponent(2)).getComponent(0)).getComponent(0)).setText("");
    ((JTextField)((JComponent)((JComponent)f.getComponent(2)).getComponent(0)).getComponent(1)).setVisible(false);

Dann ist die Auswahl nie da :)
 

Sky

Top Contributor
thE_29 hat gesagt.:
Nachtrag:

So schauts viel schöner aus :)

Code:
    ((JLabel)((JComponent)((JComponent)f.getComponent(2)).getComponent(0)).getComponent(0)).setText("");
    ((JTextField)((JComponent)((JComponent)f.getComponent(2)).getComponent(0)).getComponent(1)).setVisible(false);

Dann ist die Auswahl nie da :)
:toll: find ich cool...
 
W

Winny

Gast
Schlechte Ideen.. Wenn sich der Aufbau im FileCHooser im nächsten Release ändern würde, bekommt man nur Class Cast - Exceptions und der eigentliche Effekt den man haben möchte wäre weg.
 

Sky

Top Contributor
Anonymous hat gesagt.:
Schlechte Ideen.. Wenn sich der Aufbau im FileCHooser im nächsten Release ändern würde, bekommt man nur Class Cast - Exceptions und der eigentliche Effekt den man haben möchte wäre weg.
Deshalb war ja auch meine erste Empfehlung das ganze über einen PropertyChangeListener abzuhandeln.
 

Ilja

Bekanntes Mitglied
jo... viel schlimmer, wenn dann das auswahlfenster die componennte 1 ist ^^... die wäre dann weg :p
 

thE_29

Top Contributor
Ändert sich aber nicht und aus ;)


Bei dem Ding ändert sich sowieso nichts...

Und wenns euch net passt, macht was bessers und/oder baut eine Versionsabfrage ein....


Schlechte Ideen... i glaub i spinn.... Anders gehts gar nicht..
 
R

Roar

Gast
thE_29 hat gesagt.:
Ändert sich aber nicht und aus ;)
Bei dem Ding ändert sich sowieso nichts...
ahja? bei mir werfen beide zeilen von dir eine classcastexception mit java 5 und metal look and feel. davon ganz abgesehen kann der filechooser mit jedem lnf völlig nadersd aussehen, wie z.b. der gtk filechoooser.

Schlechte Ideen... i glaub i spinn.... Anders gehts gar nicht..
anders gehts immer, zum beispiel mit nem propertychamngelistener, oder man schreibt ne eigne UI oder was auch immer...

edit: kommt das jetz in mode olle threads rauszukramen? o_O
 

thE_29

Top Contributor
So Ihr schlaumeiern!

Das Problem bestand darin, das der olle Java 1.5 FileDialog ein Context menü (rechtsklick ) hat und der 1.4er nicht!

So gehts nun bei beiden: (und ist kürzer)

Code:
    JFileChooser fcAuswahl = new JFileChooser();
    if(Double.parseDouble(System.getProperty("java.vm.version").substring(0,3)) >= 1.5)
    {
      ( (JComponent) fcAuswahl.getComponents()[3]).getComponents()[0].setVisible(false);
    }
    else
    {
      ( (JComponent) fcAuswahl.getComponents()[2]).getComponents()[0].setVisible(false);
    }



Der mega "beschnittene File Dialog"


Code:
    if(Double.parseDouble(System.getProperty("java.vm.version").substring(0,3)) >= 1.5)
    {
      ( (JLabel) ( (JComponent) fcAuswahl.getComponent(0)).getComponent(1)).setText("Darstellung wählen");
      ( (JComponent) ( (JComponent) fcAuswahl.getComponent(0)).getComponent(0)).getComponent(0).setVisible(false);
      ( (JComponent) ( (JComponent) fcAuswahl.getComponent(0)).getComponent(0)).getComponent(1).setVisible(false);
      ( (JComponent) ( (JComponent) fcAuswahl.getComponent(0)).getComponent(0)).getComponent(2).setVisible(false);
      ( (JComponent) ( (JComponent) fcAuswahl.getComponent(0)).getComponent(0)).getComponent(4).setVisible(false);
      ( (JComboBox) ( (JComponent) fcAuswahl.getComponent(0)).getComponent(2)).setVisible(false);
      ( (JComponent) fcAuswahl.getComponents()[3]).getComponents()[0].setVisible(false);
    }
    else
    {
      ( (JComboBox) ( (JComponent) fcAuswahl.getComponent(0)).getComponent(2)).setVisible(false);
      ( (JLabel) ( (JComponent) fcAuswahl.getComponent(0)).getComponent(1)).setText("Darstellung wählen");
      ( (JComponent) ( (JComponent) fcAuswahl.getComponent(0)).getComponent(0)).getComponent(0).setVisible(false);
      ( (JComponent) ( (JComponent) fcAuswahl.getComponent(0)).getComponent(0)).getComponent(1).setVisible(false);
      ( (JComponent) ( (JComponent) fcAuswahl.getComponent(0)).getComponent(0)).getComponent(2).setVisible(false);
      ( (JComponent) ( (JComponent) fcAuswahl.getComponent(0)).getComponent(0)).getComponent(4).setVisible(false);
      ( (JComponent) fcAuswahl.getComponents()[2]).getComponents()[0].setVisible(false);
    }
 

Ilja

Bekanntes Mitglied
omg.... er hats nicht geschnallt -.-
du kannst nie wissen, was für eine version der nutzer hat...

es kann sein, dass bei 1.6.0 es wieder anders ist und bei 1.6.1 wiederum anders -.-
 

thE_29

Top Contributor
omg du interessierst mich überhaupt nicht!


Wenns dir net passt nutze es nicht!


Und wenn es bei 1.6 wieder anders ist, baue ich noch ein if ein... (ich kann auf jede Version abfragen wenns dir dann mal recht is...)

Es ist immer noch schöner wenn es gar nicht da ist als wenn da der cursor, etc immer rausspringt...

Und bei Subversionen ändert es sich nicht...

Ich zwing dich weder das du das nutzt noch sonst jemanden und wennst mal in der Arbeitswelt bist, wirst sehen das die da net bei jeder Subversion oder Hauptversion updaten! (Unser Kunde verwendet immer noch 1.4.2...)

Und die 08/15 User interessieren mich sowas von gar net...

Ich versuche nur Leuten zu helfen und wenns bei ihm klappt klappt es. Ich gehe net auf 100 verschiedenen Versionen testen obs klappt oder nicht, da es bei mir geht und bei unserem Kunden auch.

So und jetzt nerv mich net, sondern gib nen schöneren Lösungsvorschlag..
 

Ilja

Bekanntes Mitglied
es gibt eine event-konstante bei JDialog, die angibt, dass der user im feld eingegeben was eingegeben hat, so kann man sofort drauf reagieren und die anfrage zurück auf *.end setzen!
 

thE_29

Top Contributor
Source dazu!

So und was is nun schöner??

Entweder es ist erst gar nicht da!

Oder es wird immer auf was zurückgesetzt...

(Da kommt man sich vom Programm verarscht vor...)
 

Ilja

Bekanntes Mitglied
hm... aber bei deiner lösung fällt mir noch was ein..
man kann für alle komponente in einer schleife abfragen, obs eine isInstanceOf(JTextField) ist, wenn ja, sperren ^^
...somit trifft man immer das richtige feld :p
 

Lim_Dul

Top Contributor
Wenn möglich, sollte man möglichst kompatibel schreiben. Und für sowas sind ja die Events und ähnliches da.
Bei der andern Lösung muss man dann explizit dazuschreiben, dass diese Programm nur mit bestimmten Java-Versionen funktioniert. Wenn man das sicherstellen kann - ok. Aber wenn man Programme "für die Welt" schreibt, dann ist es ungünstig wenn es mit neuen Java Versionen nicht läuft, obwohl es eine andere Methode gegeben hätte das Problem zu lösen.
 
R

Roar

Gast
bidde sehr:

Code:
		fc.addPropertyChangeListener(new PropertyChangeListener() {

			private FileFilter lastOld = null;
			
			public void propertyChange(PropertyChangeEvent evt) {
				if(evt.getPropertyName().equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) {
					Object oldVal = evt.getOldValue(), newVal = evt.getNewValue();
					if(oldVal != null && oldVal instanceof MyFileFilterType)
						lastOld = (FileFilter) oldVal;
					if(newVal != null && !(newVal instanceof MyFileFilterType)) {
						fc.removeChoosableFileFilter((FileFilter) newVal);
						fc.setFileFilter(lastOld);
					}
				}
			}

		});

das funktioniert nicht nur mit allen älteren und neuen java versionen sondern auch viel wichtiger mit jedem lnf. es sieht nicht scheiße aus, es wird nix ersetzt und der user wird sich auch nich verarscht fühlen....
 
B

Beni

Gast
Oioioi, diese if's Schmerzen ja bis zum kleinen Zehen. Mach doch einen kleinen Dialog, und der User soll im Nachhinein auswählen, als was "fjksahl.spf" geöffnet werden soll. Das wäre auch für den Benutzer angehemer :wink:

[Edit: meine nicht Roar's Code, sondern der davor :bae:]
 

thE_29

Top Contributor
Da stehlt sich die Frage wtf is MyFileFilterType??


btw: mit Ilja Idee finde ich meine Idee immer noch besser!


Und was ist bei dem if so schlimm?? Für was gibts die Version als Abfrage...

Ihr habt mit Java einen haufen Dinger die ihr mit C/C++ nie haben werdet, aber ihr seit zu faul oder sonstiges die einzusetzen...


Programmiert mal in C/C++ irgendsowas und dann in java ihr würdet froh sein wenn Reflection oder Dialoge manipulieren, etc so einfach ginge wie in Java!
 
R

Roar

Gast
thE_29 hat gesagt.:
Da stehlt sich die Frage wtf is MyFileFilterType??

der typ deiner oder einer anderen klasse die filefilter implementiert. es hätte genausogut Kartoffelsalat heißen können.
 
R

Roar

Gast
thE_29 hat gesagt.:
Hab nen anonymen FileFilter erstellt??

omg, dann machst du aus deiner anonymen kalsse halt ne normale :? alles schöner als ewige aneinanderreihungen von getComponent(x)s....

und wenn du von anonymen klassen nicht loskommst kansnt du ja mit ((FileFilter) oldVal).getDescription() überprüfen obs deiner ist. ist aber auch quatsch :autsch:

und wenn dir das noch immer nicht geföllt kannst du ja mit !oldVal.equals("javax.swing.plaf.basic.BasicFileChooserUI$GlobFilter") prüfen ob man ihn nehmen darf O.O
 
B

Beni

Gast
thE_29 hat gesagt.:
Und was ist bei dem if so schlimm?
Es ist ein Hack der übelsten Sorte, eine wandelnde Zeitbombe, gegen jede noch so liberale Auslegung von OOP, sorgt garantiert irgendwann für viel Frust... :roll: :wink:
 

thE_29

Top Contributor
Wieso ein Hack??

Das ist ne ganz normale Abfrage um welche VM Version es sich handelt....


@Roar... ich geh jetzt net das Programm umstricken.. Vielleicht teste ich es morgen mal...
 

Lim_Dul

Top Contributor
Man soll sich nie auf irgendwelche Implementierungsdetails von fremden Klassen verlassen. Und nichts anders machst du. Du verlässt dich darauf, dass der Dialog in einer bestimmten Form aufgebaut ist. Dies sind aber Implementierungsdetails und nichts was nach außen spezifiziert ist.
 

thE_29

Top Contributor
Redet ihr jetzt von der if Abfrage oder vom eigentlichen ändern des Dialogs?!?!

Ihr verwirrt mich...


Dass das net gerade das "sauberste" ist is mir klar, aber so schauts am schönsten aus ^^
 
B

Beni

Gast
Wir sprechen vom ganzen Codeschnippsel, also "if" + "ändern" :wink:
 

thE_29

Top Contributor
Also das if ist ne normale Abfrage :bae:

Und den Rest kannst meinetwegen als Hack bezeichnen ;)


Nachtrag: Aber nur weil ihr es seid :bae:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N JFileChooser bzw. FileDialog Problem AWT, Swing, JavaFX & SWT 10
D Problem mit JFileChooser -> Daten werden mit anführungsstriche in JTable geschrieben AWT, Swing, JavaFX & SWT 8
Semox Swing JFileChooser: Problem Approve oder Cancel abzufangen AWT, Swing, JavaFX & SWT 7
G JFileChooser Problem AWT, Swing, JavaFX & SWT 4
T JFileChooser Problem AWT, Swing, JavaFX & SWT 3
G Problem mit JFileChooser AWT, Swing, JavaFX & SWT 6
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
javampir Swing Anzeige der FileFilter im JFileChooser AWT, Swing, JavaFX & SWT 0
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
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
A Swing JFileChooser - Anzeige in Echtzeit filtern AWT, Swing, JavaFX & SWT 10
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
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
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 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
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

Ähnliche Java Themen


Oben