Jackson: Inhalt aus Textdatei lesen und in einer JTable darstellen

Hi,

Ich möchte gerne den Inhalt einer .txt-Datei in einer JTable darstellen. Den Inhalt auszulesen ist kein Problem, aber den Inhalt dann darzustellen ist ein größerers Problem. (Ich bin absoluter Neuling was JAVA angeht, ich möchte es aber jetzt mal erlernen)

So lese ich die Datei aus:

  
...  
public ArrayList<String> readTxtFile() {  
	try {  
		BufferedReader in = new BufferedReader(new FileReader("src/pw.txt"));  
		String zeile = null;  
		ArrayList<String> array_pw = new ArrayList<String>();  
		while ((zeile = in.readLine()) != null) {  
			array_pw.add(zeile);  
		}  
  
		return array_pw;  
	} catch (IOException e) {  
		e.printStackTrace();  
		return null;  
	}  
}  
...  

So (dachte ich) könnte ich das dann in der Tabelle darstellen:

  
...  
String[] tableHeader = {"Titel", "User Namen", "Passwort", "Beschreibung"};  
String[][] tableContent = {{null, null, null, null}};  
	  
ArrayList<String> inhalt_pwFile = readPW.readTxtFile();  
Iterator iter = inhalt_pwFile.iterator();  
	  
while (iter.hasNext()) {  
          String s = (String) iter.next();  
			  
   	  tableContent = {{s}}; // Wird rot unterstrichen, mit der Meldung: "Array constants can only be used in initializers" => ok, von mir aus, so geht es dann eben nicht...  
}	  
	  
JTable table = new JTable(tableContent, tableHeader);  
f.add(new JScrollPane(table));  
...  

Wie kann ich das jetzt am besten in die Tabelle "einbauen"? Oder gibt es vllt. sogar eine bessere/einfachere Methode sowas zu lösen?

Gruß
Jackson

  1. Hallo,

    Ich möchte gerne den Inhalt einer .txt-Datei in einer JTable darstellen.

    Wie genau sieht die aus? Deiner bisherigen Implementierung entnehme ich, dass das in etwa so aussieht:

    <Titel1>
    <Username1>
    <Passwort1>
    <Beschreibung1>
    <Titel2>
    ...

    Ist das korrekt?

    Der Haken an Deiner Lösung ist, dass Arrays in Java eine ziemlich unflexible Sache sind - einmal initialisiert, kann man sie nicht mehr ändern, Elemente dazufügen usw.
    Hierfür benutzt man in Java üblicherweise Vektoren oder, was Du weiter oben ja schon gemacht hast, ArrayLists.

    Ich würde für Deine Tabelle wohl das DefaultTableModel nutzen, und das dann mit Vektoren vollstopfen:

      
      
    // Columns  
    Vector<String> columns = new Vector<String>();  
    columns.add ("Title");  
    columns.add ("User Namen");  
    columns.add ("Passwort");  
    columns.add ("Beschreibung");  
      
    DefaultDataModel dataModel = new DefaultDataModel(columns,0);  
      
    // Lets put data in it  
    for (int line = 0; line < inhalt_pwFile.size(); line++) {  
       Vector<String> row = new Vector<String>();  
       if (line+3 > inhalt_pwFile.size()-1) {  
          Sytem.err.println ("Data not complete, file seems to be corrupted");  
          break;  
       }  
       else {  
          row.add(inhalt_pwFile.get(line));  
          row.add(inhalt_pwFile.get(line+1);  
          row.add(inhalt_pwFile.get(line+2);  
          row.add(inhalt_pwFile.get(line+3);  
          line+=3;  
          dataModel.addRow(row);  
       }  
    }  
      
    // All set. Lets go  
    JTable table = new JTable(dataModel);  
      
    
    

    (ohne Gewähr, ausprobiert habe ich o.g. nicht, aber zusammen mit den Links sollte die Idee so ungefähr klar werden).

    Das macht allerdings nur Sinn, wenn Deine Daten recht einfach strukturiert sind. Bei komplexeren Daten solltest Du Dir überlegen, ein eigenes Daten-Modell zu basteln statt das DefaultDataModel zu benutzen, damit der Code noch gut lesbar und einfach wartbar ist.

    Hope that helps.

    Viele Grüße,
    Jörg

    1. Hi,

      erstmal vielen Dank für deine ausführliche Antwort.

      Wie genau sieht die aus?

      Die .txt-Datei sieht so aus:
      Titel1,Username1,Passwort1,Beschreibung1
      Titel2,Username2,Passwort2,Beschreibung2
      ...

      Der Haken an Deiner Lösung ist, dass Arrays in Java eine ziemlich unflexible Sache sind - einmal initialisiert, kann man sie nicht mehr ändern, Elemente dazufügen usw.

      Ah, ok. Das wusste ich noch nicht.

      Ich würde für Deine Tabelle wohl das DefaultTableModel nutzen, und das dann mit Vektoren vollstopfen:

      Ok, werde ich mal ausprobieren.

      Das macht allerdings nur Sinn, wenn Deine Daten recht einfach strukturiert sind.

      s.o., meine Daten sind eigentlich recht einfach strukturiert.

      Gruß
      Jackson

      1. Hallo,

        Die .txt-Datei sieht so aus:
        Titel1,Username1,Passwort1,Beschreibung1
        Titel2,Username2,Passwort2,Beschreibung2

        Ah ok, dann musst Du die zeilen noch nach Komma splitten. Dafür gibt z.b. den StringTokenizer.

        Oder Du nimmst was fertiges.

        Viele Grüße,
        Jörg

        1. Hi,

          jetzt geht alles, danke für deine Hilfe.

          Wahrscheinlich werde ich in Zukunft noch ein paar mehr Fragen/Probleme haben.

          Gruß
          Jackson