JTable Zellinhalt markierbar aber nicht editierbar

Hallo zusammen,

ich steh gerade auf dem Schlauch - ich versuche meine Tabelle so zu gestalten, dass ich per Doppelklick in den Editiermodus komme, um den Inhalt zu markieren und zu kopieren aber auf der anderen Seite das Verändern des Inhaltes selber unterbinde.

Die Möglichkeit den Inhalt einer Zelle zu markieren und zu kopieren funktioniert ja von sich aus. Nun hab ich also in meiner von JTable erweiterten Klasse isCellEditable überschrieben

Code:
public boolean isCellEditable(int x, int y) {
        return false;
    }

und nun kann der Zellinhalt nicht mehr verändert werden - allerdings geht die Tabelle nun auch nicht mehr in den Editiermodus und ich kann nicht mehr den Zellinhalt kopieren oder mit den Cursortasten durch den String gehen wenn er zu lang für die Zelle ist.

Hat jemand eine Idee wie ich beide Eigenschaften zusammen bekomme?
 
Billige Loesung: Im TableModel "setValueAt" ueberschreiben und einfach nichts tun, wenn der User was neues eingegeben hat.
 
tja, einfach etwas der Logik folgen 😉
du willst die Zelle editierbar halten, also isCellEditable() true,

aber du willst im Editieren nichts verändern,
dafür kannst du entweder einen speziellen Editor einsetzen, der nicht besonders auf Tastatur reagiert, eher kompliziert denke ich,
oder als ähnlich einfachen Weg wie isCellEditable() die setValueAt()-Methode überschreiben und die neuen Eingaben einfach nicht speichern
 
Hallo ihr beiden,

der Tipp mit "setValueAt" klappt super. Sobald man den Editiermodus verlässt wird die Zelle neu gezeichnet und die nun nicht mehr geänderten Werte aus dem Model neu geladen.

Danke :toll:

P.s. für die Geschichte mit der Logik brauch ich wohl mehr Kaffee heute morgen ...
 
Ich würde sowas eher mit einem "uneditierbarem CellEditor" machen:
Java:
		JTable table = new JTable();
		JTextField editTf=new JTextField();
		editTf.setEditable(false);
		DefaultCellEditor editor=new DefaultCellEditor(editTf);
		table.setDefaultEditor(Object.class, editor);
 

Zurück
Oben