Problem bei eigenem TableModelm mit addRow

exphertle

Grünschnabel
Hallo!

Ich habe ein Problem mit einem selbstgeschriebenem TableModel.
Ich möchte aus einer Tabelle (aus MySql-DB) Datensätze in ein JTable schreiben.
Hab dazu ein eigenes TableModel das von AbstractTableModel erbt.
Quelltext siehe unten.
Es funktioniert auch soweit, nur wenn ich das mehrmals hintereinander mache, datet er immer alle eingefügten Zeilen ab.
funktioniert über JDialog.

Ich hoffe das Problem ist rübergekommen.

Um jede Hilfe wäre ich dankbar.
Mir sind die Ideen ausgegangen

Gruß


Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.sql.*;
import java.util.*;
    public class ResultSetTableModel extends AbstractTableModel {

        private ResultSet rs;
        private ResultSetMetaData rsm;
        private Vector tmp;
        private boolean isEditable;
        
        public ResultSetTableModel(ResultSet rs) {
            this.rs = rs;
            try {
                tmp = new Vector();
                rsm = rs.getMetaData();
                
                while (rs.next()) {
                    Object[] row = new Object[rsm.getColumnCount()];
                    for (int j = 0; j < row.length; j++) {
                        row[j] = rs.getObject(j + 1);
                    }
                    tmp.add(row);
                }
            } catch (Exception e) {
                System.out.println("Error: " + e);
            }
        }

    public void setIsEditable(boolean isEditable) {
        this.isEditable = isEditable;
    }
        
        
        
        public int getRowCount() {
            return tmp.size();
        }

        public int getColumnCount() {
            try {
                return rsm.getColumnCount();
            } catch (Exception e) {
                System.out.println("Error: " + e);
                return 0;
            }
        }

        public Object getValueAt(int row, int col) {
            if (row < tmp.size()) {
                return((Object[])tmp.get(row))[col];
            } else {
                return null;
            }
        }

        public String getColumnName(int c) {
            try {
                return rsm.getColumnName(c + 1);
            } catch (Exception e) {
                System.out.println("Error: " + e);
                return null;
            }
        }
        
        public void addRow(Object[] add){
            tmp.add(add);
            fireTableDataChanged();
            fireTableRowsInserted(tmp.size()-1, tmp.size()-1);
            
        }
        
        public void setValueAt(Object aValue, int rowIndex, int colIndex){
            ((Object[])tmp.get(rowIndex))[colIndex] = aValue;
            fireTableCellUpdated(rowIndex, colIndex);
        }
        
        public boolean isCellEditable(int row, int col){
            return isEditable;
        }
        
        public Vector getDataVector(){
            return tmp;
        }
        
        public void removeRow(int row){
            tmp.removeElementAt(row);
            fireTableRowsDeleted(row, row);
        }
    }
 
Hi,

hätte da noch eine Frage. Werden in der Tabelle nach dem JDialog alle Datensätze in diese Tabelle "geschrieben"?
Falls ja, dann wäre die folgende Lösung nicht die beste aber es würde funktionieren.
Lösch einfach den momentan vorhandenen Inhalt der Tabelle bevor die Tabelle aktualisiert wird.
Wenn du beim JDialog auf "ok" klickst, dann könnten zuerst die Zellen der Tabelle gelöscht und danach wieder aktualisiert werden.

Gruß, Mike
 
es wid nur die ausgewählte Reihe in die andere Tabelle mit angehängt.

Ich vermute, dass der das nicht sauber abschließt, oder irgendwie so ein puffer hat.
 
Zurück