JCheckBox in JTable

Hi.

Ich habe einen JTable und wollte dort in eine Spalte JCheckBox einbauen. Ich war so schlau und habe erst die JTable soweit fertig gemacht, mit allem drum und dran und wollte am Ende die JCheckBox einbauen.
Das Problem ist nun, ich fülle einen Vector mit Objects und übergebe dann später den Vector zum Initialisieren des JTables.
Jetzt habe ich herausgefunden, dass man von dem TableModel die Methode getColumnClass überschreiben muss. Da ich aber nunmal kein TableModel habe, ist das etwas schlecht.

Gibt es einen anderen Weg, statt dem true/false eine Checkbox erscheinen zu lassen, oder muss ich das alles nun umschreiben, um das zu erreichen?

Vielen Dank,
Liebe Grüße
Morgyr

Nein du musst die getColumnClass überschreiben, aber ich würd sagen wenn du kein Model hast machste was falsch :wink:

Mir fälllt gerade noch ein du könntest einen eigenen Renderer und Editor schreiben und den dann für die String-Klasse einsetzen und diese übernimmt die Darstellung als String oder CheckBox.

Wenn Du es so machen möchtest, dass die gesamte Spalte immer eine CheckBox anzeigt, dann kannst Du auch sowas tun: table.getColumn("Spaltenname").setCellRenderer( table.getDefaultRenderer(Boolean.class)); table.getColumn("Spaltenname").setCellEditor( table.getDefaultEditor(Boolean.class));

Aber das Modell richtig zu benutzen wäre sicher die bessere Variante!

Ebenius

Naja, die JTable wird einmal mit Daten initialisiert. Dann soll sich an der JTable nichts mehr ändern.
Also würde es doch grundsätzlich reichen, einmalig mit einem Object-Array oder eben einem Vector die JTable zu initialisieren, wozu da noch das Table-Model? Auch wenn das nicht grade sehr flexibel ist, reicht es meiner Meinung nach aus.

Zu der Lösung:
Die funktioniert soweit wunderbar, nur scheinbar passt das, was ich mir gedacht habe, hinten und vorne nicht. Ich bekomme ein paar Casting-Exceptions, was wohl ganz einfach daran liegt, dass in den Spalten auch Strings sind. Nun gut, ich werde später einfach mal für jede Zelle, die eine Checkbox enthalten soll, den Editor und Renderer extra setzen.
Vielen Dank schonmal soweit.

Aber noch eine Frage:
Gibt es auch eine Möglichkeit als Spalten-Namen einen String und eine Checkbox zu nehmen? Also bspw. mit der Aufgabe alle Checkboxen der Spalte zu aktivieren, wenn die Checkbox im Header aktiviert worden ist.
Das Problem ist dabei nun, dass ich ja schlecht einen Renderer setzen kann, dann wird ja wieder versucht einen String in eine Checkbox zu Casten.

Du musst dir einen eigenen Renderer schreiben für die Headersache.

Ich denke ein TableModel ist hier wohl die einzig sinnvolle Lösung. Ist der Datentyp eines Tabellenwertes Boolean, wird automatisch eine JCheckBox angezeigt.

Das hier würde funktionieren:


import javax.swing.table.*;

public class MyTableModel extends DefaultTableModel {
	public MyTableModel( Object[][] matrix, Object[] titles ) {
		super( matrix, titles );
	}
	
	public Class<?> getColumnClass( int col ) {
		return ((Vector) super.dataVector.elementAt(0)).elementAt( col ).getClass();
	}
}```

[QUOTE=Morgyr]Gibt es auch eine Möglichkeit als Spalten-Namen einen String und eine Checkbox zu nehmen? Also bspw. mit der Aufgabe alle Checkboxen der Spalte zu aktivieren, wenn die Checkbox im Header aktiviert worden ist.
Das Problem ist dabei nun, dass ich ja schlecht einen Renderer setzen kann, dann wird ja wieder versucht einen String in eine Checkbox zu Casten.[/QUOTE]
Das ist nicht das einzige Problem. Auf dem Header kann man nicht editieren; das heißt, dass man zwar eine CheckBox anzeigen kann, beim Draufklicken wird aber nichts passieren. Um dieses Verhalten zu ändern ist, muss man den JTableHeader erweitern. Dazu sollte man aber deutlich mehr über JTables wissen. Mein Vorschlag: Verzichte darauf und löse das Problem ohne editierbare Tabellenköpfe. Oder arbeite Dich in die Tabellen ordenlich ein, zum Beispiel mit dem Sun Tutorial: How to Use Tables.

Grüße, Ebenius

Jut, jut. Wunderbare aussichten :smiley:

Nun, gut, ich danke euch.
Ich werde mich die Tage mal dort durch arbeiten, dann schau ich mal weiter.

Liebe Grüße,
Morgyr

Hier, ein riesiges JTable-Tutorial: http://wiki.byte-welt.de/wiki/JTable_(Java_API)
Von unserem fleißigen André Uhres genau erklärt.