JTable: Inhalt Zelle ändern

MScalli

Erfahrenes Mitglied
Hi Leutz.
Ich will ne JTable füllen, verändern, und danach den neuen Inhalt wieder abspeichern.
Irgendwie kann ich jetzt aber die Einträge nicht mehr ändern!
Also ich komme schon in die Zelle rein und kann den Inhalt kurz ändern
doch beim verlassen der Zelle steht wieder das drin was vor der änderung drin stand.

ausserdem wollt ich noch fragen ob man die Anzahl Zeichen die man in eine Zelle eingeben kann beschränken kann.. also 1 Spalte dürfen 5 Zeichen eingegeben werden, 2 Spalte 10 Zeichen usw.

hier mal bisschen code:
aufruf
Code:
    // Tabelle erstellen und adden
    CreateTableWithColumn table_panel = new CreateTableWithColumn(table_x, table_y, getColumnNames(), getData(), getWidthArray());

die Methoden
Code:
private static int[] getWidthArray() {
	int[] width_array = {100, 737};
	return width_array;
}

private static String[] getColumnNames() {
	String[] column_names  = {	"Schl.", 
								"Bezeichnung"}; 

	return column_names;
}

private static Object[][] getData() {
	Object[][] data = {
			{"Spalte 1", "Spalte 2",}
			};

	return data;
}

und die Klasse CreateTableWithColumn
Code:
import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;

public class CreateTableWithColumn extends JPanel {

	private static final long serialVersionUID = -2306289506379055756L;
	
	String[] column_names;
	Object[][] data;
	
    public CreateTableWithColumn(int width, int height, String[] _column_names, Object[][] _data, int[] _width_array ) {
        super(new BorderLayout());

        column_names = _column_names;
        data = _data;

        JTable table = new JTable(new MyTableModel());
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

        // Panel erzeugen auf dem alles liegen soll
        JPanel panel = new JPanel();
        
        //ScrollPane erzeugen und JTable adden
        JScrollPane scrollPane = new JScrollPane(table);
        scrollPane.setPreferredSize(new Dimension(width,height));

        //grösse der Zellen setzten
        initColumnSizes(table, _width_array);

        //JPanel und JScrollPane hinzufügen.
        add(panel);
        panel.add(scrollPane);
    }

    /*
     * Hier werden die Zellgrössen gesetzt
     */
    private void initColumnSizes(JTable table, int[] width_array) {
        TableColumn column = null;

        for (int i = 0; i < width_array.length; i++) {
            column = table.getColumnModel().getColumn(i);

            column.setPreferredWidth(width_array[i]);
        }
    }

    class MyTableModel extends AbstractTableModel {

		private static final long serialVersionUID = -2764611210789334359L;

		public int getColumnCount() {
            return column_names.length;
        }

        public int getRowCount() {
            return data.length;
        }

        public String getColumnName(int col) {
            return column_names[col];
        }

        public Object getValueAt(int row, int col) {
            return data[row][col];
        }

        /*
         * JTable benutzt diese Methode um den Default Renderer zu beenden
         * sonst würde z.B. ststt CheckBoxen nur (true/false) drin stehen
         */
        @SuppressWarnings("unchecked")
		public Class getColumnClass(int c) {
        	
            return getValueAt(0, c).getClass();
        }

        /*
         * Hier kann man bestimmte Zellen editierbar machen
         * Beispiel Zelle 0 nicht editierbar machen
         * if (col == 0) {
         *     return false;
         * }
         */
        public boolean isCellEditable(int row, int col) {

                return true;
        }

    }

}

schon mal thx an alle die sichs anschaun

gruss
MScalli
 
nen teil hab ich schon mal.. das ändern der Zellen geht jetzt.. hat ne Zeit gedauert :(

Code:
        public void setValueAt(Object val, int row, int col) {
        	System.out.println("Value   :" + val);
        	System.out.println("row     :" + row);
        	System.out.println("column  :" + col);

            data[row][col] = val;
            fireTableCellUpdated(row, col);

        }

jetzt fehlt nur noch das prüfen bzw. zulassen einer bestimmter Anzahl von Zeichen!!
 
Zuletzt bearbeitet:
Zurück