2016-08-02 17 views
0

Ich habe eine Aufgabe, die nicht sicher ist, wie zu lösen.Generic Class für JTable

Ich muss eine JTable mit Zeilen füllen, die ich aus einem .txt-Dokument bekomme. Das Problem ist, dass es mehrere .txt-Dokumente gibt, die mehr oder weniger Zeilen und Spalten für die JTable haben.

Beispiel: innerhalb des cars.txt:

id;hp;price;quantity 
1;100;7000;5 
4;120;20000;2 
7;300;80000;3 

innerhalb des bikes.txt

id;price;quantity;color;year 
3;80;20;red;2010 
5;200;40;green;2011 
12;150;10;blue;2007 

Also, wenn eine .txt ein JDialog gewählt wird innen mit einem JTable Pop-up wird, wo die Daten angezeigt werden. Ich dachte, dass ich vielleicht eine "Klasse Anything" erstellen könnte, wo ich eine Instanzvariable String [] [] habe, die ich durch Lesen der .txt definieren kann und nach dem Speichern der Daten in einem Array kann ich zählen, wie viele Zeilen und wie viele Spalten es hat, mit dem cars.txt Beispiel wäre es: String [4] [3]

Ist das ein guter Weg zu arbeiten oder gibt es einen besseren Weg, es zu tun?

Danke für die Hilfe: D

Antwort

1

Ihre Frage auf etwas vage ist, was Sie speziell tun wollen.

Möchten Sie die Tabelle einfach mit allen angegebenen Daten füllen? Oder möchten Sie nur bestimmte Spalten verwendet? Wenn Sie die Textdateien auswählen, wissen Sie, welche Spaltennamen sie haben (können Sie dies fest codieren oder nicht).

Ein guter Start wäre ...

die Lösung .....

Variations
DefaultTableModel dtm = (DefaultTableModel)yourJTable.getModel(); 
    // This divides your txt file to a string array divided by rows 
    string[] RowSplit = yourTxtFileThatYouRead.split("\n"); 

//this assumes that your txt file contains the column headers 
    dtm.setColumnHeaders(RowSplit[0].split(";")); 


    //Start the iteration at 1 to skip the column headers 
    for (int i = 1; i < RowSplit.length; ++i) { 
    dtm.addRow(RowSplit[i].split(//some delimeter //)); 

dtm.fireTableDataChanged(); 

Der erste Teil stellt die Spaltenüberschriften und ermöglicht hier Edited in Ihrem Tabellenspaltengröße

Der zweite Teil fügt sequentiell Zeilen hinzu.

für die Formatierung in How to Use Tables: Creating a Table Model bearbeitet bearbeitet Wie gezeigt für eine bessere Antwort

+0

vor allem, vielen Dank für Ihre Mühe: D – SergSam

+0

EDIT: was ich meinte ist, dass ich das anders bekam.Txt-Tabellen, die völlig verschieden sein können, also brauche ich eine Klasse, um Objekte jeder Zeile eines Dokuments zu erstellen, also kann ich diese in die JTable einordnen – SergSam

1

, können Sie AbstractTableModel erweitern Modelle beliebiger Dimensionen zu verwalten. Lassen Sie Ihr Modell eine List<List<String>> verwalten. Analysieren Sie die erste Zeile jeder Datei in eine List<String>, auf die von Ihren Implementierungen getColumnCount() und getColumnName() zugegriffen wird. Parsen Sie die folgenden Zeilen in eine Zeile pro Zeile: List<String>; Greifen Sie in Ihrer Implementierung von getValueAt() auf die List solcher Zeilen zu. Ein verwandtes Beispiel, das eine Map<String, String> verwaltet, wird here gezeigt. Obwohl es komplexer ist, können Sie für Nicht-String-Daten verwenden; Geben Sie das Token in Ihrer Implementierung von getColumnClass() zurück, um den Standardwert render and editor für unterstützte Typen zu erhalten. Betrachten Sie schließlich eine dieser file based JDBC drivers for flat files.