TableListener

Status
Nicht offen für weitere Antworten.

rogi1

Mitglied
hi leute...
Verwende in meiner Tabelle einen Table listener, und habe diesen vor einiger Zeit bereits versuchsweise implementiert.
Code:
class MyTableModelListener implements TableModelListener {
    JTable table;
    Object [][] data;
    
    // It is necessary to keep the table since it is not possible
    // to determine the table from the event's source
    MyTableModelListener(JTable table) {
        this.table = table;
        System.out.println("listener initialisiert");
        
    }
   
    // Update the text field whenever the value in the anchor cell changes
    public void tableChanged(TableModelEvent e) {
        System.out.println("feld geändert");
        int row = table.getSelectedRow();
        int col = table.getSelectedColumn();
        
        System.out.println("Zeile" + row + " " + col + " wurde bearbeitet");
        
    }
}
mit diesem code habe ich ihn reingehängt:
Code:
MyTableModelListener listener = new MyTableModelListener(freigabetable);
    
    private void tableListenerOn(){
        Model.addTableModelListener(listener);
        System.out.println("listener on");
    }
    
     private void tableListenerOff(){
        Model.removeTableModelListener(listener);
        System.out.println("listener off");
    }
    
    
}

der code HAT bereits funktioniert, warum er dies nicht mehr tut, weis ich nicht....
hat irgend jemand eine idee, was der fehler dabei sei könnet??
Der Compiler liefert keinen Fehler, und auch wärend dem Betrieb gibt es keine Meldung.
Die Funktion im Listener wird einfach NIE ausgeführt.
danke!
 

rogi1

Mitglied
habe nun testweise ein anderes Tablemodell reingehängt....
Da funktioniert der listener wunderbar, das problem muss also am Tabellenmodell liegen.
Jetzt muss ich nur mehr rausfinden wo dieses problem liegt...
hier mein table Modell:
Code:
class newmodel extends AbstractTableModel {
    
    private Hashtable lookup;
    private  int rows;
    private Object []classes;
    private  int columns;
    private  String headers[];
    
    public newmodel(int rows, String columnHeaders[]) {
        if ((rows < 0) || (columnHeaders == null)) {
            throw new IllegalArgumentException(
                    "Invalid row count/columnHeaders");
        }
        this.rows = rows;
        this.columns = columnHeaders.length;
        this.classes = new Object[columns];
        headers = columnHeaders;
        lookup = new Hashtable();
    }
    
    public int getColumnCount() {
        return columns;
    }
    
    public int getRowCount() {
        return rows;
    }
    
    public Class getColumnClass(int c) {
        //System.out.println(c);
        return getValueAt(0,c).getClass();
    }
    
    public String getColumnName(int column) {
        return headers[column];
    }
    
    public Object getValueAt(int row, int column) {
        if(row < rows)
            return lookup.get(new Point(row, column));
        else
            return null;
    }
    
    public Object[][] getDataArray() {
        Object [][] data = null;
        for(int i=0;i<getRowCount();i++) {
            for(int j=0;j<getColumnCount();j++) {
                data[i][j] = getValueAt(i,j);
            }
        }
        return data;
    }
    
    
    public boolean isCellEditable(int row, int col) {
        //Note that the data/cell address is constant,
        //no matter where the cell appears onscreen.
        
        return true;
        
    }
    
    public void addRow(){
        rows = rows+1;
        for(int i = 0; i<columns;i++) {
            lookup.put(new Point(rows-1,i),classes[i]);
            
        }
        
    }
    
    
    public void setDefaultString(int col) {
        classes[col] = "";
    }
    
    
    public void setDefaultBoolean(Boolean value,int col) {
        if (value == true)
            classes[col] = Boolean.TRUE;
        else
            classes[col] = Boolean.FALSE;
    }
    
    public void setValueAt(Object value, int row, int column) {
        if ((rows < 0) || (columns < 0)) {
            throw new IllegalArgumentException("Invalid row/column setting");
        }
        if ((row < rows) && (column < columns)) {
            lookup.put(new Point(row, column), value);
        }
    }
    
    private void  Scratch(){
        fireTableDataChanged();
    }
    
    
    
    public void printDebugData() {
        int numRows = getRowCount();
        int numCols = getColumnCount();
        
        for (int i=0; i < numRows; i++) {
            System.out.print("    row " + i + ":");
            for (int j=0; j < numCols; j++) {
                System.out.print("  " + getValueAt(i,j));
            }
            System.out.println();
        }
        System.out.println("--------------------------");
    }
    
    public void cleardata() {
        rows = 0;
        
    }
    
    public void delRow() {
        rows = rows -1;
        
    }
}
[/quote]
 

rogi1

Mitglied
Anders gefragt:
Weis jemand, wie man ein eigenes TabellenModell erstellen muss, damit ein TableModelListener funktioniert??
lg
 

AlArenal

Top Contributor
Wenn ich das gerade richtig überfliege, wird doch bei dir gar kein Event ausgelöst, wenn du deine Daten änderst.

Schau dir mal die Doku zu den ganzen #fireTableXYZChanged Methoden in AbstractTableModel an.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben