Ich hab mal wieder ein Problem an dem ich mich schon einige Zeit beschäftige aber einfach nicht auf die Lösung komme. Ich hoffe ihr könnt mir dabei helfen.
Ausgangspunkt:
Ich habe eine Art Dateiviewer geschrieben. (Ich habe Vista)
Ich habe eine JList und eine JTable. In der JList und JTable lasse ich zunächst alle meine Laufwerke auflisten. Die Jlist und JTable habe ich jeweils mit einem MouseListener versehen, sodass wenn ich auf z.B.: "C:/" klicke, eine Dateiarray erstellt wird(wäre im Beispiel: File[] dateiarray = new File("C:/").listFiles();, dass die Dateinamen der Datei aufgelistet werden und in die JList bzw. in der JTable wieder aufgelistet werden.
Folgendes Problem:
Wenn ich in manchen Verzeichnissen bin (auch C:/), werden mir in der JList bzw. JTable leere Zeilen hinzugefügt, obwohl ja die Arrays ja nur die Dateinamen enthalten. Warum werden dort leere Zeilen hinzugefügt?
Hier der Quellcode um Verzeichnissse zu öffnen (nur für die JList):
center = JPanel
adapt = Mouselistener
Pfad = String
Java:
center.remove(pane);
liste.removeMouseListener(adapt);
dir =newFile(Pfad);
fileList = dir.listFiles();DateiListe=newString[fileList.length];for(g =0; g < fileList.length; g++){if(fileList[g].isHidden()==false){if(fileList[g].canRead()){DateiListe[g]=fileList[g].getName();}}}
liste =newJList(DateiListe);
pane =newJScrollPane(liste);
center.add(pane);
liste.addMouseListener(adapt);
center.validate();
Also das mit dem auflisten der Dateinamen funktioniert einwandfrei(auch wenn ich das hier jetzt ein bisschen mager beschrieben habe). Wenn jemand eine Idee oder einen Lösungsvorschlag hat dann bitte postet ihn doch.
wenn eine Datei versteckt oder nicht lesbar ist, bekommt sie mit dieser for-Schleife den Namen "", welcher dann auf eine Zeile geschrieben wird => leere Zeile.
du solltest die leeren Strings also noch vor
Code:
liste = new JList(DateiListe);
aus der Liste entfernen, d.h. eine neue Liste erstellen, in welcher die leeren Strings nicht mehr drin sind.
edit:
Codevorschlag:
Java:
ArrayList<String>DateiListe=newArrayList<String>();for(g =0; g < fileList.length; g++){if(!fileList[g].isHidden()&& fileList[g].canRead()){DateiListe.add(fileList[g].getName());}}
liste =newJList(DateiListe.toArray(null));
Vielen Dank es funtioniert perfekt.
Ich hab jetzt noch eine Frage. Unzwar handelt es sich jetzt um die JTable. Dort habe ich ja das selbe Problem und jetzt frage ich mich wie ich es da hinbekomme.
Ich habe auch schon ein bisschen rumgespielt mit den ArrayLists aber bin auf keine Lösung gekommen.
Hier mal mein Quellcode an dem ich gefeilt habe:
DateiListe,pfade,beschreibung = ArrayList<String>
Java:
info=newString[fileList.length][2];for(g =0; g < fileList.length; g++){if(!fileList[g].isHidden()&& fileList[g].canRead()){DateiListe.add(fileList[g].getName());
pfade.add(fileList[g].getPath());
beschreibung.add(view.getSystemTypeDescription(fileList[g]));
info[g][0]=pfade.get(pfade.size()-1);
pfade.remove(pfade.size()-1);
info[g][1]=beschreibung.get(beschreibung.size()-1);
beschreibung.remove(beschreibung.size()-1);}}
liste =newJList(DateiListe.toArray());DateiListe.clear();
pane =newJScrollPane(liste);
model =newDefaultTableModel(info,angabe);
table.setModel(model);
Leider habe ich jetzt immernoch das selbe Problem. Ich kann mir schon denken dass es wieder an dem Array (diesmal info) liegt. Aber ich weis nicht wie ich das ohne leere Zeilen hinbekomme.
Ohne mir jetzt nochmal genau dein Problem oder dne ganzen Thread durchgelesen zu haben, nur ein kleiner Tipp der dir evtl. weiterhilft:
Man kann listFiles() auch einen FileFilter mitgeben, so dass du dort vorab schon die Dateien die nicht in dem File-Array landen sollen rausfiltern kannst!