JTable geänderten wert abfragen

xeal

Mitglied
JTable setValueAt Problem

Hallo,

habe noch ein Problem mit der JTable. Ich weiß nicht genau wie ich meine setValueAt Methode schreiben soll.
Zur Zeit erstelle ich ein Objekt welche meine Daten speichert. anschließend sollen meine Daten in einer ArrayList abgelegt werden.

Code:
	private ArrayList<MyData> arrList = new ArrayList <MyData>();
...

		mde.setGernr(rs.getInt(1));
		mde.setUebnr(rs.getInt(2));
		mde.setDatum(rs.getString(3));
	
         arrList.add(mde);

Anschließend fülle ich meine Table mit

Code:
	table.setValueAt(arrList.get(row).getGernr(), row,0);		
	table.setValueAt(arrList.get(row).getUebnr(), row,1);

Das Anzeigen der Daten funktioniert soweit, jedoch werden keine Änderung in der ArrayList bzw in der Klasse gespeichert.

Meine setValueAt Methode ist noch leer, könnt ihr mir vielleicht helfen was ich da rein schreiben soll? Weiß irgendwie nicht weiter
Code:
	      public void setValueAt(String value, int rowIndex, int columnIndex){
		
	      }

Vielen Dank schon mal für eure Hilfe.

Gruß Xeal
 
Zuletzt bearbeitet:
Moin,
einen Wert aus einer Zelle einer Tabelle lässt sich jederzeit mit getValueAt(...) auslesen. Wenn Du auf eine Änderung reagieren möchtest, kannst Du das mitunter aus setValueAt heraus erledigen. Denn die wird ausgeführt, wenn ein Wert in der Tabelle geändert wird/wurde. Allerdings ohne automatische Überprüfung, ob der neue Wert wirklich anders ist als der alte.
BTW JTable gehört eigentlich ins Swing-Unterforum. ;)
 
Die Werte kann ich ja aus meiner Tabelle abfragen jedoch bekomme ich immer nur den Wert wieder der zum Anfang der Zelle zugewiesen wurde. Der Editierte Wert wird nicht ausgegeben auch nicht wenn der Focus geändert wird.

Code:
table.getValueAt(e.getFirstRow(),e.getColumn())

Deshalb hatte ich angenommen das eventuell die setValueAt Methode nicht richtig ist und die Daten nicht an das Tabellenmodel übergeben werden.

Gruß Xeal
 
Verstehe ich nicht.

public void setValueAt(Object value, int row, int col)

Hier ist value der neue Wert. Wenn Du innerhalb dieser Methode ein getValueAt(row, col) aufrufst, bekommst Du doch noch den alten Wert.
 
Ich glaube sein Problem ist, das seine Zellen editierbar sind, dann schreibt er etwas neues hinein (natuerlich ist dann die View aktuell), nur in seinem Model aendern sich die Daten nicht. Ich habe das noch nie gemacht.

Aber eigentlich muss es nen Event geben, wenn du den Focus verlierst und dann musst du die setValue(...) Methode aufrufen. So wuerde ich es jedenfalls angehen. Aber Snape, der Tabellenguru kennt sich da 100% besser aus als ich ;)
 
Moin und danke für die Blumen :)
Das ist alles keine große Kunst. setValueAt(...) wird automatisch nach Verlassen/ENTER der editierten Zelle aufgerufen und ausgeführt. Also ist diese Methode einfach im TableModel zu implementieren, fertig.

Wie ich oben schon schrieb, bei setValueAt(Object value, int row, int col) bedeutet value den NEUEN Wert, den alten bekommt man mittels getValueAt(row, col) auch innerhalb der setValueAt(...)
 
Hallo,

danke erstmal für die ganzen Antworten. Eine getValueAt Methode habe ich implementiert. Bei der setValueAt Methode weiß ich nicht wie ich auf mein Objekt in der Arraylist zugreifen soll um es zu aktualisieren. Könnt ihr mir da einen Ansatz zeigen? Habe probiert mit einem System.out.println("set Value") zu gucken wann die setValueAt Methode aufgerufen wird. Jedoch erschien keine Ausgabe.

Hier fülle ich meine Tabelle, was auch funktioniert mit der setValueAt Methode.

Code:
    public void fillTable(int row, JTable table){
        
        if(row >= 0){
            DefaultTableModel model =  (DefaultTableModel)  table.getModel();
            model.addRow(new Vector());
        }
                table.setValueAt(arrList.get(row).getGernr(), row,0);        
                table.setValueAt(arrList.get(row).getUebnr(), row,1);    
                table.setValueAt(arrList.get(row).getVkst(), row,2);    
    
    }

Hier frage ich meine werte in der ArrayList ab.

Code:
public Object getValueAt(int rowIndex, int columnIndex) {

            String val = null;    
            
      switch (columnIndex){
            case 0:
                val =  arrList.get(rowIndex).getGernr();
                
                break;
                
            case 1:
                val =  arrList.get(rowIndex).getUebnr();
                break;
                
            case 2:
                val = arrList.get(rowIndex).getVkst();
                break;
                

            default:
                val = null;
                break;
            }
            System.out.println("ArrayList: "+val);
            return val;

    }
 
Moin,
Schreck lass nach - Du füllst die Tabelle über die setValueAt(...)-Methode Heiliger Strohsack. :-o
Leg die Werte in die ArrayList, auf die Du im getValueAt zugreifst. Das ist alles und reicht vollkommen aus.
Offenbar ist auch beim zweiten Mal etwas Wichtiges nicht zwischen den Ohren angekommen, deshalb ein drittes Mal, und diesmal in fett:

setValueAt(...) wird automatisch nach Verlassen/ENTER der editierten Zelle aufgerufen und ausgeführt. Also ist diese Methode einfach im (Default)TableModel zu implementieren, fertig.
 
Hey,

snape kannst du mir vielleicht ein grundkonzept einer JTable schicken vielleicht sogar mit einer Arraylist als datenbehälter? Wenn ich schon nicht setValueAt() verwenden darf um die Tabelle zu füllen dann weiß ich jetzt garnicht mehr weiter. Jetzt bin ich richtig verwirrt.

Danke schon mal
xeal
 
Hi,
ich fürchte das würde hier den Rahmen sprengen und Du würdest vermutlich mehr als die Hälfte nicht verstehen, da mein einfachstes TableModel konzeptionell noch etwas weiter aufgebohrt ist als ein Standardmodel.
JTable lernt man nicht eben so im Vorbeigehen. Am übersichtlichsten dargestellt ist sie m.E. in dem Buch "Java Swing" von O'Reilly. Weiterhin empfehle ich das "Handbuch der Javaprogrammierung" und die Java-Insel. Das Java-Kochbuch, mein 4. Nachschlagewerk, ist beim Thema Tabelle nicht die richtige Quelle.
 
Zurück