Daten in eine JTable schreiben

  • Themenstarter Themenstarter Gelöschtes Mitglied 17508
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 17508

Gast
Hallo Forum!

Ich habe ein vermutliches triviales Problem, leider aber für mich im Moment unlösbar.

Ich befülle meine JTable aus dem Inhalt eines Files, welches als Key - Value Pair aufgesetzt wurde.
Das Befüllen funktioniert soweit ohne Probleme, will ich jedoch die Daten ändern, dann schreibt er leider immer die Daten in die erste Spalte anstatt sie eigentlich in die 2te Spalte zu schreiben.

Ich arbeite mit einem einfachen Vector, in welchem ich mir die Daten aus dem File schreibe.

Ich vermute mal, dass es genau daran liegt, leider weiss ich aber nicht, wie ich es hinbiegen muss, damit es so funktioniert, wie ich es gerne hätte - beide Spalten editierbar und die Werte werden auch in die Spalte geschrieben, in welcher ich sie brauche!

Vll. kann mir jemand weiterhelfen!

Danke schon mal vielmals!

Mein Code dazu sieht folgendermaßen aus:

Java:
package configtool;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;

public class Model extends AbstractTableModel{

    Vector data;
    Vector columns;
    String line;
       
    public Model() {
        String line;
        data = new Vector();
        columns = new Vector();
        try {
            FileInputStream fis = new FileInputStream("C:/R/config.properties");
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            StringTokenizer st1 = new StringTokenizer(br.readLine(), "=");
            while (st1.hasMoreTokens())
                columns.addElement(st1.nextToken());
            while ((line = br.readLine()) != null) {
                StringTokenizer st2 = new StringTokenizer(line, "=");
                while (st2.hasMoreTokens())
                    data.addElement(st2.nextToken());
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @Override
    public int getRowCount() {
        return data.size() / getColumnCount();
    }

    @Override
    public int getColumnCount() {
        return columns.size();
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return (String) data.elementAt((rowIndex * getColumnCount()) + columnIndex);
    }
    
    @Override
    public String getColumnName(int column) {
        if ( column == 0 )
            return "Key";
        else
            return "Value";
    }
    
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return true;
    }
    
    @Override
    public Class getColumnClass(int columnIndex) {
        if(columnIndex==1)
            return String.class;
        return String.class;
    }
    
    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        data.setElementAt(aValue, rowIndex);
        fireTableDataChanged();
    }
}
 
Zuletzt bearbeitet von einem Moderator:
in getValueAt(int rowIndex, int columnIndex) rechnest du doch um:
row = 4 und col = 1 bedeutet nach [c](rowIndex * getColumnCount()) + columnIndex[/c] Index 9 im Data-Vector oder so

das musst du bei setValueAt() genauso machen, kann ja wieder row = 4 und col = 1 sein,
wieso rechnest du hier nicht genauso den Index kompliziert aus?

wichtig:
besser nicht den Code direkt kopieren, auch wenn es hier nur wenig ist,
lieber gleich ne Methode [c]int calcIndex(row,col)[/c] definieren

oder die Daten einfacher strukturieren, data = Vector tatsächlich genau der Zeilen,
jede Zeile wieder ein Vector (so macht es DefaultTableModel) oder ein Array oder eine eigene Daten-Klasse mit Key/ Value per Methoden/ Felder
 
Zuletzt bearbeitet von einem Moderator:
Danke für deine Tipps!

Leider weiss ich es nicht, wie ich es mit einem Array oder dergleichen hinbekommen kann!
Mittels einem Beispiel würde ich mir leichter tun!

Danke Dir vielmals!

lG
 
du schaffst es doch, alle Elemente, alle Token in data einzufügen, genauso gut könntest du auch in einen anderen Vector einfügen und diesen dann in data,
freilich ist ein bisschen zu beachten, wann muss der neue erstellt werden usw., aber das musst du nun entweder selber schaffen oder darauf verzichten,
mit Array und allen anderen Lösungen ist es dasselbe, bei Array evtl. mit den Indexen Mühe, aber einfach bei 0 anfangen und geeignet erhöhen,

wenn du Code postest und intelligente Fragen dazu, dann kann ich helfen, nur 'fertige Lösung posten' geht nicht
 

Neue Themen


Zurück
Oben