Eigenes Model für jtable

ChriMo

Mitglied
Hi

Wollte lt. "Java ist auch eine Insel" Kapitel 19.19.2 nachvollziehen. ("QuadratTableModelSimple")
Zellen der 1.Spalte editierbar machen hat noch funktioniert.

Dass geänderte Werte übernommen werden, funktioniert nicht:

Code:
public void setValueAt( Object val, int row, int column ){  
foo[row][column] = val;  
fireTableCellUpdated( row, column );
}

Was soll das foo sein?, Müsste doch vorher deklariert werden, ruft jedenfalls einen Fehler hervor.

LG
ChriMo
 

youza

Erfahrenes Mitglied
Muss echt sagen Normalerweise finde ich die Insel super aber das is jetzt echt mal schlecht erklärt, hab selber eine Weile gebraucht um zu verstehen was die da von einem wollen.
Das Problem ist die GetValue Methode die liefert immer das gleiche zurück du musst initern in deinem Model die Werte irgendwie speichern und aktualisieren. Hier kommt foo ins Spiel.
Ich hab die das Ganze mal implementiert:

Java:
import javax.swing.table.AbstractTableModel;

class SquareTableModelSimple extends AbstractTableModel {

    /**
    * 
    */
    private static final long serialVersionUID = 8745370661655280341L;
    String foo[][];
    int row;
    int column;

    public SquareTableModelSimple(int row, int column) {
        foo = new String[row][column];
        this.row = row;
        this.column = column;
        for (int j = 0; j < column; j++) {
            for (int i = 0; i < row; i++) {
                if (j == 0)
                    foo[i][j] = String.valueOf(i);
                if (j == 1)
                    foo[i][j] = String.valueOf(i * i);
                if (j == 2)
                    foo[i][j] = String.valueOf(i * i * i);
            }
        }
    }

    @Override
    public int getRowCount() {
        return row;
    }

    @Override
    public int getColumnCount() {
        return column;
    }

    @Override
    public Object getValueAt(int row, int col) {
        return foo[row][col];
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return columnIndex == 0;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        Object oldValue = getValueAt(rowIndex, columnIndex);
        System.out.println(oldValue);
        foo[rowIndex][columnIndex] = aValue.toString();
        fireTableCellUpdated(rowIndex, columnIndex);

    }
}

Aufrufende Klasse:
Java:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class MainFrame extends JFrame{
    /**
    * 
    */
    private static final long serialVersionUID = 6486361818495858339L;
    public static void main(String[]args){
        new MainFrame();
    }
    public MainFrame(){
        this.getContentPane().add( new JScrollPane( new JTable( new SquareTableModelSimple(100,3) ) ) );
        this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        this.pack();
        this.setVisible( true );
    }
}
Viele Grüße
Youza
 

Neue Beiträge