Discussion:
Konfigurierung von JFileChooser
(zu alt für eine Antwort)
Carmen Bartels
2006-06-26 19:30:50 UTC
Permalink
Hallo,
für eine Anwendung unter Windows XP brauche ich einen Möglichkeit, den
Benutzer eine Datei bestimmen zu lassen, die dann beim Drücken eines
Buttons von ihrer ursprünglichen Stelle (z.B. USB-Stick) an eine von
mir bestimmte Stelle kopiert wird und deren Namen plus zusätzliche
Informationen dann in einer Datenbank landet.

Der entsprechende Codeabschnitt sieht folgendermassen aus:
JFileChooser fileChooser = new JFileChooser();
fileChooser.setApproveButtonText("Hochladen");

int returnVal = fileChooser.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION)
{
// kopiere Datei und speichere Daten in Datenbank
}

Das funktioniert soweit auch prächtig. Ich habe dazu nur noch 3
weitergehende Fragen:

1.) Nun möchte ich, dass beim Anzeigen des Dateidialoges nicht das aktuelle
Verzeichnis angezeigt wird, sondern die Liste aller Laufwerke, die man
per Druck auf den Button für Desktop und dann Auswahl des
"Verzeichnisses" Arbeitsplatz erhält.
Leider befinden wir uns unter Windows und es ist kein echtes
Verzeichnis und meine letzten tiefgreifenden Kenntnisse von Windows
beziehen sich auf die Version 3.11 ;-)

Kennt jemand eine Möglichkeit, wie ich implementiere? Durch den
sourcecode von JFileChooser bin ich nicht so ganz durchgestiegen, sonst
hätt ich mir dort die entsprechende Funktionalität abgeschaut.

2.) Ich brauche den Cancel-Button nicht. Um genau zu sein, der
Cancel-Button wird nur zur Verwirrung betragen, weil er keine
Funktionalität haben wird (der Datei-Dialog ist nur eine von 3
Möglichkeiten der Auswahl und die Beendigung des Gesamtvorganges
erfolgt auf anderem Wege).
Kann ich den Cancel-Button einfach wegkonfigurieren oder muss ich mir
die Komponenten des JFileChooser samt Unterkomponenten holen und die
Komponente für den CancelButton per setVisible(false) ausblenden?

3) Wenn mir Teil 1 gelingt, dann möchte ich von den Buttons im oberen
Teil die Buttons für "Desktop" und "Neuer Ordner" ausblenden. Auch hier
die Frage, ob ich das irgendwie konfigurieren kann oder per
Unsichtbarsetzen der entsprechenden Komponentenmachen muss.


Das Ganze spielt sich, wie gesagt, unter Windows XP ab und verwendet
wird die JDK 1.5

Danke schon mal
Carmen
Sascha Broich
2006-06-27 07:23:58 UTC
Permalink
Post by Carmen Bartels
1.) Nun möchte ich, dass beim Anzeigen des Dateidialoges nicht das aktuelle
Verzeichnis angezeigt wird, sondern die Liste aller Laufwerke, die man
per Druck auf den Button für Desktop und dann Auswahl des
"Verzeichnisses" Arbeitsplatz erhält.
JFileChooser fc=new JFileChooser();
File dir=fc.getFileSystemView().getHomeDirectory();
dir=fc.getFileSystemView().getFiles(dir,false)[0];
fc.setCurrentDirectory(dir);
Post by Carmen Bartels
2.) Ich brauche den Cancel-Button nicht. Um genau zu sein, der
Cancel-Button wird nur zur Verwirrung betragen, weil er keine
Funktionalität haben wird (der Datei-Dialog ist nur eine von 3
Möglichkeiten der Auswahl und die Beendigung des Gesamtvorganges
erfolgt auf anderem Wege).
Kann ich den Cancel-Button einfach wegkonfigurieren oder muss ich mir
die Komponenten des JFileChooser samt Unterkomponenten holen und die
Komponente für den CancelButton per setVisible(false) ausblenden?
Darauf wird es wohl hinauslaufen. Zumindest im MetalFileChooserUI ist der
Cancel-Button private und nicht nach außen sichtbar. Allerdings hat er den
Text von
UIManager.getString("FileChooser.cancelButtonText",fileChooser.getLocale());
Daran könntest du ihn erkennen.
Post by Carmen Bartels
3) Wenn mir Teil 1 gelingt, dann möchte ich von den Buttons im oberen
Teil die Buttons für "Desktop" und "Neuer Ordner" ausblenden. Auch hier
die Frage, ob ich das irgendwie konfigurieren kann oder per
Unsichtbarsetzen der entsprechenden Komponentenmachen muss.
Auf die gleiche Weise. Schau in die Source von BasicFileChooserUI, da
stehen die ganzen Texte drin.

Zumindest das "Neuer Ordner" kannst du verhindern, wenn du vor dem
Erstellen des JFileChoosers
UIManager.put("FileChooser.readOnly", Boolean.TRUE);
aufrufst. Das gilt dann aber für alle JFileChooser.


Sascha Broich
--
Ob eine schwarze Katze Unglück bringt, hängt davon ab,
ob man ein Mensch ist oder eine Maus.
Carmen Bartels
2006-06-27 20:52:28 UTC
Permalink
Post by Sascha Broich
Post by Carmen Bartels
1.) Nun möchte ich, dass beim Anzeigen des Dateidialoges nicht das aktuelle
Verzeichnis angezeigt wird, sondern die Liste aller Laufwerke, die man
per Druck auf den Button für Desktop und dann Auswahl des
"Verzeichnisses" Arbeitsplatz erhält.
JFileChooser fc=new JFileChooser();
File dir=fc.getFileSystemView().getHomeDirectory();
dir=fc.getFileSystemView().getFiles(dir,false)[0];
fc.setCurrentDirectory(dir);
Danke,
wird morgen gleich umgesetzt und nachgeschaut, WAS ich da eigentlich
mache.
Post by Sascha Broich
Post by Carmen Bartels
2.) Ich brauche den Cancel-Button nicht. Um genau zu sein, der
Cancel-Button wird nur zur Verwirrung betragen, weil er keine
Funktionalität haben wird (der Datei-Dialog ist nur eine von 3
Möglichkeiten der Auswahl und die Beendigung des Gesamtvorganges
erfolgt auf anderem Wege).
Kann ich den Cancel-Button einfach wegkonfigurieren oder muss ich mir
die Komponenten des JFileChooser samt Unterkomponenten holen und die
Komponente für den CancelButton per setVisible(false) ausblenden?
Darauf wird es wohl hinauslaufen. Zumindest im MetalFileChooserUI ist der
Cancel-Button private und nicht nach außen sichtbar. Allerdings hat er den
Text von
UIManager.getString("FileChooser.cancelButtonText",fileChooser.getLocale());
Daran könntest du ihn erkennen.
Post by Carmen Bartels
3) Wenn mir Teil 1 gelingt, dann möchte ich von den Buttons im oberen
Teil die Buttons für "Desktop" und "Neuer Ordner" ausblenden. Auch hier
die Frage, ob ich das irgendwie konfigurieren kann oder per
Unsichtbarsetzen der entsprechenden Komponentenmachen muss.
Auf die gleiche Weise. Schau in die Source von BasicFileChooserUI, da
stehen die ganzen Texte drin.
Zumindest das "Neuer Ordner" kannst du verhindern, wenn du vor dem
Erstellen des JFileChoosers
UIManager.put("FileChooser.readOnly", Boolean.TRUE);
aufrufst. Das gilt dann aber für alle JFileChooser.
Okay, also auf die "harte" Tour für die meisten Buttons.

Danke nochmal vielmals
Carmen

Loading...