# JTable mit Combobox-Editierung schon nach einem Klick



## GilbertGrape (11. Nov 2008)

Hallo,

ich habe eine JTable mit einer ComboBox als CellEditor. In der soll man auch eingeben können.
Das Problem ist, dass er schon in den Editor springt, wenn ich einmal auf die Zelle klicke und wenn ich sie verlasse, wird dann jedes Mal setValueAt mit einem leeren String aufgerufen. Ich kann das natürlich abfangen, aber warum kann man denn schon nach einmal klicken editieren? Bei meiner Text-Spalte gehts auch erst nach dem Doppelklick. Der Unterschied ist, dass ich da keinen eigenen Editor für hab.

Also hier is mein Editor für die Combobox:


```
class MyComboBoxEditor<T> extends AbstractCellEditor implements
			TableCellEditor {

		private JComboBox box = null;

		public MyComboBoxEditor(T[] items) {
			box = new JComboBox(items);
			box.setEditable(true);

		}
		
		public void addItem(T item){
			box.addItem(item);
		}

		public Object getCellEditorValue() {
			return box.getSelectedItem();
		}

		public Component getTableCellEditorComponent(JTable table,
				Object value, boolean isSelected, int row, int column) {
			if (value instanceof Category) {
				box.setSelectedItem((Category) value);
			}
			if (value instanceof Rating){
				box.setSelectedItem((Rating)value);
			}
			if (value == null){
				box.setSelectedItem(null);
			}
			return box;
		}

	}
```


----------



## Verjigorm (11. Nov 2008)

Du beantwortest die Frage doch quasi selbst.

Der CellEditor "IST eine JCombobox" und die wird standardmäßig nicht durch einen Doppelklick aktiviert


----------



## GilbertGrape (11. Nov 2008)

und wie kann ich das standard-mäßige Verhalten ändern?


----------



## Verjigorm (11. Nov 2008)

wou willst du das überhaupt ändern?
Das rafft doch keiner, dass er die ComboBox erst doppelklicken muss ...

So ganz generell kannst du einen Mouselistener mit getClickCount() benutzen.

Dazu gibts nen bissl was in der Forensuche


----------



## GilbertGrape (20. Feb 2009)

Verjigorm hat gesagt.:


> wozu willst du das überhaupt ändern?
> Das rafft doch keiner, dass er die ComboBox erst doppelklicken muss ...



Es ist zwar jetzt schon etwas her, aber ich bin jetzt wieder drauf gestoßen und finde es immernoch unlogisch.
Mit dem ersten Klick wird meiner Meinung nach nur die Zeile selektiert und mit dem zweiten wird dann der CellEditor aktiviert. 
Wenn der Editor schon beim ersten Klick aktiviert wird, stört zum Beispiel dann, wenn man die Zeile löschen will.
Wie gesagt, bei dem Textfeld funktioniert das ja auch (dafür habe ich keinen eigenen Editor). Das ist erst bei einem Doppelklick editierbar.

Und nochmal zu Verjigoms Einwand, dass das keiner rafft: Bei einem normalen Textfeld muss man ja auch nicht doppelt klicken um es zu aktivieren, aber in einer Tabelle schon.


----------



## Geeeee (20. Feb 2009)

Evtl. hilft dir Folgendes:
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/DefaultCellEditor.html#setClickCountToStart(int)


----------



## Vayu (20. Feb 2009)

da hat der Gilbert recht


----------



## GilbertGrape (20. Feb 2009)

Oh ja vielen Dank!
Mit dem DefaultCellEditor geht vieles viel einfacher.
Ich hatte vorher immer von AbstractCellEditor abgeleitet und jetzt brauch ich gar keine eigene Klasse mehr, weil ich dem DefaultCellEditor ja meine ComboBox übergeben kann.
Ich danke dir Geeeee!!

Achso und mein Problem löst die von Geeeee vorgeschlagene einfache Methode setClickCountToStart.


----------

