Swing JXTable, vom CellRenderer gerendertes Value holen.

Status
Nicht offen für weitere Antworten.

jambusa

Mitglied
Hallo,

Mein Szenario:

Ich habe eine JXTable und einen eigenen CellRenderer, der CellRenderer macht aus einem Integer Wert ein bestimmten String. Die Anzeige in der JXTable klappt auch super und der Integer wird in einen String gerendert. Jetzt möchte ich mit dem gerenderten Wert arbeiten und mir den Wert über die JXTable holen, aber das funktioniert nicht.

Frage:
Weiß jemand ob es möglich ist den vom CellRenderer gerenderten Wert abzuholen ?

jXTable.getStringAt( row, column ) liefert immer nur das original Value zurück wie jXTable.getValueAt( row, column ).

Danke schon mal !
 
Der Renderer kann den String eigentlich nicht zur Verfügung stellen. Schließlich ist es nur Zufall, dass Dein Renderer einen String erstellt; andere Renderer zeichnen Bilder, malen geometrische Figuren, tanzen Boogie.

Ich würde in diesem Fall einen Converter bauen (zum Beispiel eine Ableitung von der TableStringConverter-Klasse und diese sowohl im Renderer als auch im RowSorter als auch an der Stelle wo Du den Wert selbst benötigst benutzen.

Ebenius
 
Man könnte sich eine eigene Klasse erstellen, die einen Integer entgegennimmt und auf desen Basis einen Membervariable setzt. Dann überschreibt man in die toString()-Methode und gibt diese Membervariable zurück. Das aus der Klasse erzeugte Objekt übergibt man dann anstelle des Integers an das TableModel.

Und wenn der Renderer nur für den Zweck der "Wandlung" eines Integers in ein spezifischen String verwendet wurde, kann man ihn ganz weglassen.

Ich kenne JXTable zwar nicht, aber nehme mal an, dass die Tabelle in dem Fall ähnlich wie JTable arbeitet.

Hier ein Bsp. für der Klasse
Java:
class SpecialObject  {
	private int intValue;
	private String stringValue;
	
	public SpecialObject(int i) {
		this.intValue = i;
		switch(i) {
		case 0: this.stringValue = "Hallo"; break;
		case 1: this.stringValue = "Hello"; break;
		case 2: this.stringValue = "Hola"; break;
		default: this.stringValue = "????";
		} 
	}
	public String toString() {
		return this.stringValue;
	}
}
 
Man könnte sich eine eigene Klasse erstellen, die einen Integer entgegennimmt und auf desen Basis einen Membervariable setzt. Dann überschreibt man in die toString()-Methode und gibt diese Membervariable zurück. Das aus der Klasse erzeugte Objekt übergibt man dann anstelle des Integers an das TableModel.
Das halte ich für ungeschickt. Die Darstellung des Integer-Wertes ist Aufgabe der View und gehört somit in den Renderer. Zwei verschiedene Tabellen können den Wert des selben Modells unterschiedlich darstellen wollen. In unterschiedlichen Ländereinstellungen sind die Formatierungen für numerische Werte unterschiedlich, etc.

Ebenius
 
Hallo,


jXTable.getStringAt( row, column ) liefert immer nur das original Value zurück wie jXTable.getValueAt( row, column ).

Danke schon mal !

Dein Renderer muß StringValue imlementieren, damit das funktioniert. Am einfachsten schaltest Du komplett auf SwingX Renderer um, die Bauklötzchen sind schön klein und wiederverwertbar (auch in JXList, JXTree)

Java:
StringValue sv = new StringValue() {
   String getString(Object value) {
       /// your conversion code
   }
};
// XX = table, list tree
XXCellRenderer = new DefaultXXRenderer(sv)

HTH
Jeanette

Übrigens: wer keine Ahnung von einem spezifischen Framework hat, muß nicht anworten, darf auch still bleiben ;-)
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben