TableCellRenderer für JPanel? Wie?

Hallo!

Ich habe folgendes Problem. Irgendwo außerhalb gibt es eine Methode, die mir ein JPanel mit beliebigem Inhalt übergibt, ich hab keine Ahnung, was es enthält und es ist von Panel zu Panel verschieden.

Nun möchte ich aber eine JTable erstellen und in einer Tabellenspalte diese JPanels anzeigen. Jemand eine Ahnung, wie ich das bewerkstelligen könnte?

Ich hab's schonmal frech mit Folgendem versucht.

Code:
public class JComponentRenderer extends JPanel implements TableCellRenderer{

	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){

		return this;
	}
}

Aber dann wird nur ein leeres JPanel angezeigt, also eine einfache graue Fläche.
 
Moin,
Du musst natürlich auch der Klasse der betreffenden Tabellenspalte diesen Renderer zuweisen.
 
Hi Snape,

hab ich natürlich gemacht. Der Renderer wird ja auch aufgerufen, aber der Inhalt der Panel wird eben nicht angezeigt, sond. nur das Panel selbst. Verstehe ich auch nicht so recht.

Gruß,

Roman
 
Ich aber. Du musst doch dem Renderer die entsprechenden Komponenten zuweisen. Z.B.
this.add(table) bzw. mit weiteren Parametern, je nach verwendetem Layout. Und erst dann return this.
 
Oh mann, Du hast echt voll den Überblick! Warum fällt mir so etwas nicht auf? Jetzt klappt es wunderbar.

Code:
public class JComponentRenderer extends JPanel implements TableCellRenderer{

	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
		removeAll();
		add((JComponent)value);
		return this;
	}
}

Code:
public class JComponentEditor extends JPanel implements TableCellEditor{

	JComponent comp;

	public JComponentEditor(){
		super();
		listeners = new Vector();
	}
	
	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column){
		if(value instanceof JComponent){
			comp = (JComponent)value;
			add(comp);
		}
		return this;
	}

	public Object getCellEditorValue(){ // Wird intern aufgerufen, nachdem die Editierung beendet oder abgebrochen wurde.
		return comp;
	}

	[..]

Naja, manchmal denke ich echt, ich studiere das falsche... Und mal wieder vielen Dank, Snape
 
Zurück