Textdatei zu JTable

Stephan2009

Aktives Mitglied
Hallo zusammen ich brauch mal einen Tipp und zwar habe ich ein Gui Fenster (unter anderem mit Textfields in denen ich den Autor, Titel und Metadaten eingebe, diese Daten werden in einer Textdatei gespeichert. Nun habe ich eine JTable die diese Form aufweist : (Nummer) , (Foto Feld), (Titel) , (Autor), Bewertungsfeld. Wie ihr seht werden mehr Eingaben in meinem vorherigen Gui gespeichert, es sollen aber in meiner JTable nur die Einträge Titel , Autor und Bewertungsfeld aus der Textdatei dargestellt werden. 1 Frage: Wie filter ich die Einträge am besten aus meiner Txt heraus
2.Wie bekomme ich sie am einfachsten in die JTable
 
Zuletzt bearbeitet von einem Moderator:
wenn du Dateien in einer bestimmte Strukur in dein File speicherst
zB. Autor,Titel,Metadaten

Liest du die Datei zeilenweise ein
und wertest sie dann bsp mit
Java:
String[] elemente = line.split(",");
und mit folgenden Code kannst du dann die Tabelle befüllen
Die Elemente die du nicht benötigst überspringst du dann ganz einfach
Java:
jTab.setValueAt(elemente[i], zeile, spalte);
 
ein tabellenmodel ist angebracht
beispielsweise wenn du feststellst das deine Tabelle voll ist und du neue Zeilen benötigst kannst du sie schnell zufügen
 
Java:
try
                {
                File file = new File("neue_bewertung.txt");
                FileReader fr=new FileReader(file);
                BufferedReader br=new BufferedReader(fr);
                String zeile;
                 while((zeile=br.readLine())!=null)
                    {
                    
                    String[] elemente=zeile.split(";");
                    
                    table.setValueAt(elemente[0], 1, 2);
                    table.setValueAt(elemente[3], 1, 3);
                    table.setValueAt(elemente[6], 1, 4);
                    }
                fr.close();
                }
            catch(Exception e)
                {}
Ich habe das jetzt so gemacht aber die Table zeigt nichts an
 
Exceptions immer ausgeben, und ohne Komplettprogramm + Datei kann niemand was dazu sagen,
neben zig Standardfehlern anfangen bei anderer Tabelle in der GUI könnte das TableModel zu wenig Zeilen/ Spalten enthalen,

da eine Datei immer schwierig ist, verwende testweise lieber eine Liste von Strings, aus der kannst du genauso per Schleife auslesen
 
Java:
String[] columnNames = {"Nr.", "Kategorie Fotos" ,"Titel","Autor","Bewertungen" };
            
       	    
	        Object[][] data = {
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""},
	        {"", "", "", "", ""}, 
	        };
	        // fehlt ein ActionListener zum Sortieren der Table
	        
	        
	        final JTable table = new JTable(data, columnNames);

	        table.getColumnModel().getColumn(1).setCellRenderer(new MyRenderer());
	        table.getColumn("Kategorie Fotos").setPreferredWidth(20);
            table.setRowHeight(0, 50); // Höhe der Row
            table.setRowHeight(0, 50);
            
            // Zugriff auf Textdatei und in Table einfügen
                         
                try
                {
                File file = new File("neue_bewertung.txt");
                FileReader fr=new FileReader(file);
                BufferedReader br=new BufferedReader(fr);
                String in = br.readLine();
                while (in != null) {

                //String zeile;
                 //while((zeile=br.readLine())!=null)
                    {
                    
                    String[] elemente=in.split(";");
                    
                    table.setValueAt(elemente[0], 1, 2);
                    table.setValueAt(elemente[3], 1, 3);
                    table.setValueAt(elemente[6], 1, 4);
                    }
                fr.close();
                }}
            catch(Exception e)
                {e.printStackTrace();}

Hier mal ein TeilCode des Programms
Die Txt hat diesen Datensatz:
Titel: Unfall; Kategorie: Unfall; Metadaten: Fotos; Autor: Stephan Text: bla; Bewertungsabgabe: Ihre Bewertung war: 4

Exception : java.lang.ArrayIndexOutOfBoundsException: 3
 
Zuletzt bearbeitet:
Du solltest außerdem eine Variable Zeile verwenden.
Momentan überschreibst du immer wieder die 2 Zeile deiner Tabelle (Die erste Zeile hat den Wert 0 das gleiche gilt auch für die erste Spalte)

Gib zunächst mal alle alle Strings von elemente aus und überprüfe ob diese Richtig sind


ändere mal zeile 19 folgendermaßen um und entferne zeile 21
Java:
	 DefaultTableModel model = new DefaultTableModel(data, columname);
		table = new JTable(model);
 
Zuletzt bearbeitet:
ich habs Problem erkannt es funktioniert jetzt thx @all 🙂

nur ein Problem ist noch und zwar schreibt er mir jetzt an die richtige Stelle in Table nur was muss ich

hier
Java:
String zeile;
                 while((zeile=br.readLine())!=null)
                    {
                    
                    String[] elemente=zeile.split(";");

das ich mehrere unterschiedliche Elmente abspeichern kann weil so zeigt er mir immer das selbe nämlich nur das 1 Element bis ; in der TXT
 
Zuletzt bearbeitet:
mit
Java:
elemente[0]= erhälst du den ersten String
elemente[1]= denn nächsten usw und so fort

ich hoffe ma ich habe dich richtig verstanden das momentan immer nur der Titel ausgegeben wird
 
mach mal
Java:
elemente.length
da müsste dann die anzahl an einzelelemente ausgegeben werden
wenn da nur 1 rauskommt
schau dir noch mal deine textdatei an gib ggf mal die ganze zeile aus und prüfen ob die Trennzeichen immer vorhanden sind
 
was hat diese Diskussion zum Ziel? es doch alles so einfach so 100% genau zu machen:
1. wie gesagt auf Datei verzichten, dann wüßte jeder worum es geht, im Moment nicht

2. falls nicht dann gibt es immer noch die einfache Möglichkeit die Zeile mit System.out.println() auszugeben,
ein so einfacher Befehl, der im Normalfall so vieles sofort verläßlich aufklärt, aber wird so selten eingesetzt..

3. neben der Zeile gehört natürlich auch das Array ausgegeben, auch wenn man sich aus der Zeilen-Ausgabe wahrscheinlich denken kann wie es aussehen wird,
Arrays.toString(array) hilft dabei, und natürlich System.out.println()

4. falls die nicht Code-Zeilen immer noch [c]table.setValueAt(elemente[0], 1, 2);[/c] lautet, kann es gut sein dass die Exception erst in der setValueAt()-Methode auftritt,
im Zweifel immer alles auftrennen:
ein perfektes Programm sieht so aus:
Java:
System.out.println("das Array ist: "..);
System.out.println(jetzt kommt Index .. dran);
String x = array[index]
System.out.println(Aufruf im Array mit Index .. hat geklappt, x ist ..);

System.out.println(im übrigen ist die Tabelle, die gleich dran kommt .., so viele Spalten.., so viele Zeilen .., und was noch so spannend ist ..............);
System.out.println(versuche gleich x = .. in Tabelle an Spalte .., Zeile .. zu setzen);
table.setValueAt(x, 1, 2);
System.out.println(Versuch, x = .. in Tabelle an Spalte .., Zeile .. zu setzen, war anscheinend erfolgreich (sonst ja Exception));
usw.

jeder einzelne Programmschritt kann quasi ohne Denkleistung sicher überprüft werden,
oder man fragt im Forum..

edit: geht schon, na gut 😉
 

Neue Themen


Zurück
Oben