bei JTabledatenänderung alten Wert auslesen

thoser

Mitglied
hi,

mein Problem ist folgendes.
Ich muß ,wenn eine JTablezelle geändert wird, den bisherigen Wert auslesen und in eine DB2-Tabelle schreiben .
Das bedeutet also, wenn eine Zelle editiert wird, ich den alten Wert zu erst auslesen muß und erst dann die Änderung zulassen darf.
Ich habe versucht, das mittels TableModelListener zu lösen, sprich, wenn die Zelle verlassen wird startet die Methode "tablechanged". Die "setValueAt" macht auch brav was sie soll und übergibt sie an die "setValueAt" der Elternklasse. Da wird allerdings "fireTableChanged" aufgerufen und damit spricht "tableChanged" meines Listeners an,...

Wie kann ich den gordischen Knoten lösen?

Steffen

der Listener
Code:
jTable.getModel().addTableModelListener(new TableModelListener()
{
    public void tableChanged(TableModelEvent event) 
    {
        int zeile = event.getFirstRow();
        
        
        int spalte = event.getColumn();
        
        // Änderung mitloggen
        if (spalte != -1)
        {
            try
            {
                model.setValueAt(model.getValueAt(zeile, spalte), zeile, spalte, "WP_POSITION");

            }
            catch (RuntimeException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
    }
});


hier geht der setValue-Aufruf hin...
Code:
public class SortableTableModel extends DefaultTableModel 
{
    private final static String STATIC_VbrmEJBHome_REF_NAME = "ejb/VbrmEJB";
    private final static Class STATIC_VbrmEJBHome_CLASS = VbrmEJBHome.class;
	  int[] indexes;
	  TableSorter sorter;
	  

	  public SortableTableModel() {
	  }
	  
	  public SortableTableModel(Object [][] rowData, String [] columnNames) {
			
			super (rowData, columnNames);			
			//sortColumnDesc = new boolean[columnNames.length];			
	  }

	  
	  
/*	  public Object getValueAt(int row, int col) {
	    int rowIndex = row;
	    if (indexes != null) {
	      rowIndex = indexes[row];
	    }
	    return super.getValueAt(rowIndex, col);
	  }
*/
	  /**
	   * setzt value an row und col und schreibt alten Wert in LogTabelle
	   * @param value neuer Wert
	   * @param row in dieser ZEILE
	   * @param col und dieser SPALTE eingetragen
	   * @param tabelle - esgeht um Daten in dieser Tabelle
	   */
	  public void setValueAt(Object value, int row, int col, String tabelle) 
	  {
	    int rowIndex = row;
	    String tmp = new String();
	    
	    if (indexes != null) 
	    {
	      rowIndex = indexes[row];
	    }
	    
	    GetMandantInfoRequest request = new GetMandantInfoRequest();
		try
		{
		    tmp = this.getValueAt(row,col).toString();
		}
		catch (NullPointerException e2)
		{
		    // TODO Auto-generated catch block
		//    e2.printStackTrace();
		}	    
   	    

		// nur Änderungen mithämmern, wenn eingelesene Daten aktualisiert werden
		if ((tmp != "burzum") 
		        && (tmp != null) 
		        && (!tmp.startsWith("[Ljava.lang.Object;")
		        && (tmp.length() > 0)
		                ))
		{
		  
		  request.setMandant(new BigDecimal(this.getValueAt(row,0).toString()));
		  GregorianCalendar kalender = new GregorianCalendar();
		  java.util.Date datum = null;
		  java.sql.Date dbdatum = null;
		  VbrmEJB aVbrmEJB = createVbrmEJB();
			
		  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		  try
		  {
			    datum = sdf.parse(this.getValueAt(0,1).toString());
			    dbdatum = new java.sql.Date(datum.getTime());
			    request.setStichtag(dbdatum);
		  }
		  catch (ParseException e1)
		  {
			// TODO Auto-generated catch block
//			    e1.printStackTrace();
		  }
		  request.setFeld(this.getColumnName(col));
		  request.setWertAlt_Log(this.getValueAt(row, col).toString());
		  request.setWertNeu_Log(value.toString());
		  
//		  request.setTabelle("WP_POSITION");
request.setTabelle(tabelle);		  
		  request.setRisikoArt(this.getValueAt(0,2).toString());
		  request.setRisikoSchl(this.getValueAt(0,3).toString());
			//     um 100% die richtige Zeitzone zu bekommen 
		  kalender.setTimeZone(TimeZone.getTimeZone("ECT"));
		  request.setTimestmp (new Timestamp(kalender.getTime().getTime()));
		  try
		  {
			    aVbrmEJB.setLogEntry(request);
		  }
		  catch (RemoteException e)
		  {
			    // TODO Auto-generated catch block
			    e.printStackTrace();
		  }    
		  
        }
		
		    super.setValueAt(value, rowIndex, col);
		
	    
	  }
 
Zurück