JTable nicht editierbar machen

steveg

Grünschnabel
Hallo.
Bin noch ziemlich neu, bei Java.Swing. Hab mir das meiste zwar schon angeeignet, aber bin bei dem JTables auf eine Frage gestossen.

Ich benutze einen JTable mit DefaultTableModel, der nur zur Ausgabe von Daten benutzt werden soll. Daher möchte ich, daß die Zellen nicht editierbar sind.
Nun die Frage:
Kann man das beim DefaultTableModel überhaupt machen, und wenn ja, wie? (habe nur die Methode IsCellEditable gefunden, aber damit kann mans ja nicht auf false setzen)

Und wenn es nicht geht, und ich ein eigenes TableModel erstellen muß, wie muß ich dann die Methoden getRowCount und getValueAt überschreiben?
 
Du musst einen eigenen CellEditor für die Zellen setzen. Dieser kann false bei isEditable zurückliefern.

Mehr dazu hier: Link
 
Könntest du mir vielleicht ein Code-Beispiel geben, daß nix anderes macht, als zu verhindern, daß man die Zellen editieren kann.

Es geht um ein Projekt, und mir fehlt die Zeit, mich da so genau einzulesen.

Wäre auf jeden Fall super nett.

Danke schon mal, steveg
 
Könntest du mir vielleicht ein Code-Beispiel geben, daß nix anderes macht, als zu verhindern, daß man die Zellen editieren kann.
Das geht nicht so direkt, da dort jeweils auch Programmspezifische Daten einfliessen.

Du koenntes auch eine Klasse von AbstractTableModel ableiten, aber sowohl fuer den Editor als auch fuer das TableModel ist ein Beispiel ziemlich lang und muss individuell auf das Programm angepasst werden.
:google: (Wo ist eigentlich ein freundlicher Googlesmiley?)
 
Zuletzt bearbeitet:
Hallo!

Code:
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.DefaultCellEditor;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

/*
 * Created on 02.07.2004
 *
 * TODO 
 */

/**
 * @author Administrator
 */
public class JTableDemo extends JFrame {

    private final JTable table;

    private final TableModel model;

    public JTableDemo() {
        super("JTableDemo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        String[][] data = { { "a1", "b1", "c1" }, { "a2", "b2", "c2" },
                { "a3", "b3", "c3" } };

        String[] headers = { "A", "B", "C" };

        model = new DefaultTableModel(data, headers);

        table = new JTable(model) {
            public boolean isCellEditable(int x, int y) {
                return false;
            }
        };

        getContentPane().add(table, BorderLayout.CENTER);

        setVisible(true);
        pack();
    }

    public static void main(String[] args) {
        new JTableDemo();
    }
}

Gruß Tom
 
Danke, genau das hab ich gebraucht.
Ärgerlich, eigentlich ja recht einfach, aber ich bin einfach nicht drauf gekommen.

Nochmal danke.
 
Zurück