# CellEditor für individuelle Zellen in JTable



## mas (3. Apr 2006)

Hallo!
Ich habe folgendes Problem:
Ich habe einen JTabel und ich moechte in einer Spalte eine ComboBox als CellEditor anlegen.

Dies gelingt mir auch, wenn ich für die Spalte immer denselben Editor anlege:
Also so:


```
TableColumn mengenspalte= tabelle.getColumnModel().getColumn(3);
mengenspalte.setCellEditor(new DefaultCellEditor(comboBox);
```

Ich möchte aber nun, dass unterschiedliche ComboBoxen, für jede Reihe angezeigt werden.
Ich bräuchte also was, was nicht nur die Spalte sondern auch die Reihe (Also die spezielle ZELLE) belegt.

Pseudocode: also  nicht megenspalte.setCelleditor() sondern individuelleZelle.setCelleditor()...

Ich kann das leider nicht finden....oder bin ich am Holzweg? Das kann doch nicht so kompliziert sein.

mfg
mas


----------



## Beni (3. Apr 2006)

Anstelle des DefaultCellEditors machst du dir eine Klasse die von AbstractCellEditor erbt, und stellst deine ComboBox in der "getTableCellEditorComponent"-Methode zusammen. Wir haben dazu auch was in der FAQ.


----------



## mas (4. Apr 2006)

Vielen Dank,das werde ich mir gleich mal ansehen.

danke!!!


----------



## mas (11. Apr 2006)

Habe mir das angesehen und auch halbwegs gelöst .
D.h ich habe einen eigenen CellEditor geschrieben, der eine ComboBox zur Auswahl von Werten bereitstellt. 
jedoch hab ich nun folgendes Problem.

Wenn ich die entsprechende Spalte in meinem JTable auswähle erscheint die 
entsprechende ComboBox und ich kann etwas auswählen.

Wähel ich nun einen Wert aus, wird dieser jedoch nicht gleich in der Tabelle übernommen.

Erst wenn ich an eine andere Stelle der Tabell klicke wird der Wert übernommen.
Woran kann das liegen?

Hier mein individueller Editor


```
public class AuftragCellEditor extends AbstractCellEditor implements TableCellEditor{
	
	private JComboBox comboBox=new JComboBox();

	/* 
	 * Der Wert der, der Tabelle übergeben wird (Die Auswahl aus der ComboBox)
	 */
	public Object getCellEditorValue() {
		System.out.println("getCellEditorValue()?");
		return this.comboBox.getSelectedItem();
		// TODO Auto-generated method stub
		
	}

	/* (non-Javadoc)
	 * @see javax.swing.table.TableCellEditor#getTableCellEditorComponent(javax.swing.JTable, java.lang.Object, boolean, int, int)
	 * Hier wird geprüft wie die Mindestbestellmenge des Produktbuendels ind er jeweiligen Reihe ist
	 */
	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
		if(column==3){  
			Hier die Mindestmenge berechnen;
			for(int i=mindestmenge;i<200;i++) {
				Integer a=new Integer(i);
				intVec.add(a);	
			}
			this.comboBox.addActionListener(this);
			this.comboBox= new JComboBox(intVec);
			
		}
		return this.comboBox;   //Die angepasste ComboBox zurückgeben
	}
```



Und so ist der Editor an meine Tabelle gebunden:

```
TableColumn mengenspalte= auftragProduktTabelle.getColumnModel().getColumn(3);
mengenspalte.setCellEditor(new AuftragCellEditor());
```


Hoffe ihr könnt mir folgen:
Zusammenfassend:
Ich klicke aud die entsprechende Spalte im JTable;
Die ComboBox erscheint und ich kann was auswählen. (Klick auf das Element)
Nun minimiert sich die ComboBox und ich sehe in der ComboBox meine Auswahl (Z.b Wert 4)
Erst wenn ich an eine andere Stelle des JTable klicke verschwindet die ComboBox und der Wert bleibt so wie ichs will in der Tabelle.

Ich möchte, dass der Wert sofort in der Tabelle landet nachdem man in der ComboBox einen Wert ancklickt.

lg
mas


----------

