JTable editieren



  • Hi,

    ich habe eine JTable, welche ihre Inhalte per JDBC aus einer Datenbank bekommt.
    Die Felder der Tabelle habe ich mit :

    public boolean isCellEditable(int row, int column){
    switch(column){
    case 0: return false;
    case 1: return true;
    default: return false;
    }

    }

    im TableModel editierbar gemacht.

    Ich kann jetzt auch in die Zellen klicken und Text eingeben, der eingegebene Wert wird jedoch sobald ich die Zelle wieder verlasse verworfen!

    Was muss ich tun damit die werte bestehen bleiben?

    Danke!



  • Hast du die setValueAt-Methode des Modells ebenfalls überschrieben?

    Wenn neue Werte in der Tabelle eingegeben werden, werden diese über die setValueAt-Methode an das Modell übergeben. Natürlich muss getValueAt diese aktuallisierten Werte dann auch noch zurückgeben.



  • ah ok danke!

    Das müsste es sein....



  • Hi,

    meine TableModel Klasse sieht folgender Maßen aus:

    package Backend;

    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.util.Vector;

    import javax.swing.event.TableModelEvent;
    import javax.swing.table.AbstractTableModel;

    public class ClassTableModel extends AbstractTableModel
    {
    private static final long serialVersionUID = 1;

    private Vector classSR1 = new Vector();
    private Vector value = new Vector();
    private ResultSetMetaData metadata;

    public ClassTableModel(String sql) throws SQLException, ClassNotFoundException
    {
    loadTable(sql);
    }

    public void clearVector(){
    this.classSR1.clear();
    this.value.clear();
    }

    public boolean isCellEditable(int row, int column){
    switch(column){
    case 0: return false;
    case 1: return true;
    default: return false;
    }

    }
    public void loadTable(String sql) throws ClassNotFoundException, SQLException{
    clearVector();

    ResultSet rset ;
    Database db = new Database();
    db.connect();

    rset = db.getValues(sql);
    metadata = rset.getMetaData();

    while(rset.next()){
    for(int i=1 ; i<=71 ; i++){
    this.classSR1.addElement(metadata.getColumnName(i));
    this.value.addElement(rset.getString(i));
    }
    }

    db.disconnect();
    }
    public int getRowCount()
    {
    return classSR1.size();
    }

    public int getColumnCount()
    {
    return 2;
    }
    public String getColumnName(int columnIndex){
    switch (columnIndex)
    {
    case 0 : // 1.Spalte
    return "Klasse";
    case 1 : // 2.Spalte
    return "Wert";
    default: // Standardantwort
    return "Default";
    }
    }
    public Object getValueAt(int row, int column)
    {
    switch (column)
    {
    case 0 : // 2.Spalte
    return classSR1.elementAt(row);
    case 1 : // 1.Spalte
    return value.elementAt(row);

    default: // Standardantwort
    return "ERROR";
    }
    }

    }

    in wieweit muss ich sie verändern/ergänzen das die veränderten werte drinstehen bleiben? Ich bekomm das ganze nicht so richtig gebacken!

    Danke schonmal...!!!



  • Irgendwie so könnte es funktionieren:

    public void setValueAt(Object obj, int rowIndex, int columnIndex)
         {
           if (columnIndex == 1)
             value.setElementAt(obj, rowIndex);
         }
    

Anmelden zum Antworten