Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

foreach

Frischling

  • »foreach« ist der Autor dieses Themas

Beiträge: 87

Beruf: Student

  • Private Nachricht senden

1

30.11.2010, 20:28

Problem mit JFileChooser

Hi!
Ich arbeite gerade an einem Projekt, in dem die Daten nicht in einem einzelnen Dokument gespeichert werden sollen, sonder zur besseren Übersicht einzelne Dokumente in einer Datei zusammengefasst werden. Das Abspeichern bzw. das Einlesen der Daten funktioniert problemlos. Um dem Benutzter das Abspeichern bzw. das Öffnen eines Projekts so angenehm wie möglich zu machen verwende ich eine JFileChooser. Mir erscheint es allerdings nicht sinnvoll, dass der Benutzer eine Datei, die ein Projekt repräsentiert "betreten" kann.
Mein bisheriges Vorgehen war, dass ich eine eigene Klasse aus "FileView" abgeleitet habe und die Methode "isTraversable(File f)" so überschrieben habe, dass sie "false" zurück gibt wenn f ein Projekt ist. Dann habe ich meinem JFileChooser, mit der Methode "setFileView(FileView fileView)", eine Instanz meiner FileView-Klasse übergeben.
Dieses Vorgehen führte allerdings nur dazu, dass das Projekt garnicht mehr angezeigt wird. Deshalb habe ich das gleiche mit "FileSystemView" versucht, was alledings zum gleichen Ergebnis führt.

Ich freue mich bereits auf eure Lösungsvorschläge.

2

30.11.2010, 20:34

EDIT: Wie genau sieht deine Dateistruktur denn aus und was meinst du mit betreten?

foreach

Frischling

  • »foreach« ist der Autor dieses Themas

Beiträge: 87

Beruf: Student

  • Private Nachricht senden

3

30.11.2010, 20:36

Ich speichere meherere Dokumente in einem Ordner.
Sorry, wegen der ungenauen Beschreibung.

Zur Dateistruktur:

Projekt
|
+--Dokument1
|
+--Dokument2

Wenn der Benutzer in dem JFileChooser Dialog auf Projekt klick, dann soll er nicht zu den beiden Dokumenten gelangen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »foreach« (30.11.2010, 20:42)


4

30.11.2010, 20:42

Wenn ich das richtig verstehe willst du also, dass der Benutzer den Projektordner nicht betreten kann.
In dem Projektordner sind wahrscheinlich die eigentlichen Dateien und eine Datei, die die Projektinformationen enthält.
Dann musst du allerdings erst herausfinden, ob der Ordner ein Projektordner ist, da ein Ordner keine Endung hat.
So wie ich das sehe musst du also in deiner isTraversable testen, ob ein Ordner eine Datei mit Projektinformationen enthält.

foreach

Frischling

  • »foreach« ist der Autor dieses Themas

Beiträge: 87

Beruf: Student

  • Private Nachricht senden

5

30.11.2010, 20:44

Ja du hast recht; und der Test funktioniert auch.
Ich habe ja wie bereits erwähnt isTraversable überschrieben.

6

30.11.2010, 22:27

hast du dem FileChooser gesetzt, dass er Directories auswählen soll? (setFileSelectionMode)
EDIT: ansonsten wäre Code ganz hilfreich.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ComputerAddict« (30.11.2010, 22:44)


foreach

Frischling

  • »foreach« ist der Autor dieses Themas

Beiträge: 87

Beruf: Student

  • Private Nachricht senden

7

01.12.2010, 14:40

Ja ich habe den FileSelectionMode auf DIRECTORIES_ONLY gesetzt.
Das hat allerdings nichts nichts meinem eigentlichen Problem zu tun.
Wie gesagt, das Auswählen und das Öffnen eines Projekts fuktionierern bereits, nur der Benutzter soll eben nicht zu den beiden Dokumenten gelangen.

Hier etwas Code:

FileView-Klasse (ProjectView extends FileView)(Ausschnitt)

Quellcode

1
2
3
4
public Boolean isTraversable(File f){
                if(ProjectManager.isProject(f))return false;
                else return null;
            }


ProjectManager (Ausschnitt)

Quellcode

1
2
3
4
5
6
7
8
public static final String T1 = "t1.txt";
public static final String T2 = "t2.txt";

public static boolean isProject(File f){
        boolean containsT1 = new File(f,T1).exists();
        boolean containsT2 = new File(f,T2).exists();
        return (containsT1 &&  containsT2);
    }


Datei-Dialog-Klasse (Ausschnitt)

Quellcode

1
2
3
jfc = new JFileChooser(System.getProperty("user.home"));
jfc.setFileView(new ProjectView());
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY );

8

03.12.2010, 16:15

Du darfst den SelectionMode nicht auf Directories only setzen. Sonst denkt der filechooser wegen deiner istraversable-methode, dass die Datei kein Directory ist und er sie deshalb nicht öffnen darf und also auch nicht anzeigt.

foreach

Frischling

  • »foreach« ist der Autor dieses Themas

Beiträge: 87

Beruf: Student

  • Private Nachricht senden

9

03.12.2010, 16:40

Danke!
Wie konnte ich das nur übersehen?:cursing:

Werbeanzeige