# JFileChooser.DIRECTORIES_ONLY



## flashdog (21. Aug 2008)

Hallo,
Ich moechte unter Swing nur ein Verzeichnis auswaehlen, d.h. das ich speater verschiedene Dateien in diesem Verzeichnis speicher kann.

Leider habe ich nur JFileChooser.DIRECTORIES_ONLY gefunden. Dies funktioniert zwar sieht aber nicht gut aus, weil bei File Name der Pfad zum Verzeichnis erscheint.

Gibt es vielleicht eine schoenere moeglichkeit um Verzeichnisse auszuwaehlen?

Viele Gruesse


----------



## X5-599 (21. Aug 2008)

hallo,

geht es dir nur darum, dass das eingabefeld weg soll?
wenn ja, könntest du doch von JFileChooser erben und
das feld einfach removen...
etwa so:


```
public class MyFileChooser extends JFileChooser
{
	public MyFileChooser()
	{
		((JPanel)this.getComponent(2)).remove(0);
	}
}
```

kann dir aber nicht sagen, ob es durch das entfernen des textfeldes zu
irgendwelchen exceptions kommen kann. bei meinem versuch erscheint
das fenster und man kann die dateien(ordner) anklicken - ohne fehler.

ich weiss aber wie gesagt nicht wie der JFileChooser intern funktioniert.
also alle angaben ohne gewähr ^^

gruß,
michael


----------



## flashdog (21. Aug 2008)

Das weglassen von "File name und Files of Type" weare klasse.


----------



## X5-599 (21. Aug 2008)

Das weglassen von was? Ich weiss im Moment nicht was du damit meinst?

Kannst du das genauer erklären?

Gruß,
Michael


----------



## flashdog (22. Aug 2008)

oh sorry. Wenn ich JFileChooser.DIRECTORIES_ONLY verwende bekomme ich so ein aenliches Fenster http://www.cs.jhu.edu/~pari/600.107/Horstmann/slides/Ch15/images/JFileChooser.GIF.

Da ich nur ein Verzeichnis auswaehlen moechte wuerde ich gerne den Label "File name" in "Directory name" umbennen. Den zweiten Label "Files of Type" und die Auswahl "All Files" moechte ich loeschen.

Wie kann man dies anstellen?


----------



## flashdog (22. Aug 2008)

oh sorry. Wenn ich JFileChooser.DIRECTORIES_ONLY verwende bekomme ich so ein aenliches Fenster http://www.cs.jhu.edu/~pari/600.107/Horstmann/slides/Ch15/images/JFileChooser.GIF.

Da ich nur ein Verzeichnis auswaehlen moechte wuerde ich gerne den Label "File name" in "Directory name" umbennen. Den zweiten Label "Files of Type" und die Auswahl "All Files" moechte ich loeschen.

Wie kann man dies anstellen?


----------



## X5-599 (22. Aug 2008)

in etwa so?


```
public class MyFileChooser extends JFileChooser
{
	public MyFileChooser()
	{
		//der untere Bereich des FileChooser's
		JPanel p = ((JPanel)this.getComponent(2));
		//entfernen der unteren Zeile
		p.remove(2);
		
		//aendern des oberen labels
		JLabel l = (JLabel)((JPanel)p.getComponent(0)).getComponent(0);
		l.setText("Directory name");
	}
}
```


wie gesagt, ich weiss nicht ob sich der JFileCooser in irgendeiner Situation an den
Änderungen stört... Denn es sieht so als wenn das Label dessen Text geändert wird eigentlich
kein JLabel ist sondern ein AlignedLabel(welches eine nested Class sein muss). Aber darauf
lässt sich nicht casten, also hab ich es dreisterweise mit JLabel versucht und es ging...
Der Unterstrich unter den "n" wird zB auch automatisch gesetzt. Keine Ahnung was passiert, wenn
man einen Text setzt, der kein "n" beinhaltet.

Lange Rede kurzer Sinn:
Es ist wohl das was du haben möchtest, aber ich garantiere für nichts.   

Gruß,
Michael


----------



## flashdog (23. Aug 2008)

Danke für den Code, aber leider bekomme ich es nicht zum laufen.


```
//Test Code:
import java.io.File;
import javax.swing.*;

public class Dir {
	public static void main(String args[]) {
		File folder_path = null;
		MyFileChooser fc = new MyFileChooser();
		fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		int result = fc.showOpenDialog(null);
		if (result == JFileChooser.APPROVE_OPTION)	
			folder_path = fc.getSelectedFile();
		System.out.print("Folder: " + folder_path.getAbsolutePath());
	}
}
```

und die Fehlermeldung:

```
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 2
	at java.awt.Container.remove(Unknown Source)
	at MyFileChooser.<init>(MyFileChooser.java:12)
	at Dir.main(Dir.java:8)
```

Habe ich etwas falsch gemacht?


----------



## André Uhres (24. Aug 2008)

Hier gibt's einen JDirectoryChooser:  http://www.jtechlabs.com/
und hier ist ein Demoprogramm dazu: http://www.java-forum.org/de/userfiles/user3690/DirectoryChooserDemo.rar


----------



## X5-599 (25. Aug 2008)

hmm,

keine Ahnung was da schief läuft. Bei mir funktioniert das so. Es kann sein, dass der JFileChooser nicht immer aus gleich vielen Komponenten besteht? Ich meine von JRE zu JRE Version. Bei mit läuft immernoch 1.4_08.
Sorry, aber im Moment weiss ich nicht weiter...

Gruß,
Michael


----------



## flashdog (25. Aug 2008)

Danke für deine Hilfe. Wie bist du eigentlich auf deine Lösung gekommen?


----------



## X5-599 (25. Aug 2008)

Ich hab mir überlegt, dass ja evtl. der JFileChooser nur aus irgendwelchen JPanels/JLabels/JtextFields etc bestehen könnte. Also hab ich mal versucht mir mit getComponents() die Komponenten zu besorgen.
Die hab ich dann entweder entfernt mit removeComponent() oder per Methodenaufruf verändert (setText() z.B)
Dafür muss allerding vorher ge"cast"et werden. Denn getComponents() gibt nur ein Components Array zurück.

Ist halt kniffelig, da man also wissen muss an welcher Stelle des Components Array's welche Art von Komponente steckt... Um das zu Erfahren hab ich mir z.B. von allen Komponenten toString() anzeigen lassen. Das verrät schon einiges.

Und dann hab ich halt "rumprobiert". mal die eine Komponente removed mal die andere... Bis ich dann die gefunden hatte, die du nicht sehen wolltest.

Das war so mein Gedankengang. Ich würde mich freuen, wenn jemand noch eine andere Möglichkeit aufzeigte(die es mit Sicherheit geben muss) denn ich bin halt alles andere als ein Profi! Und ich will hier nicht was erzählen, was unter Umständen schlimme Auswirkungen haben könnte.

Gruß,
Michael


----------

