Table + CellEditor mit Combo und Textfield

ablake27

Grünschnabel
Hallo,

ich brauche einen CellEditor der den ComboBoxCellEditor und den TextCellEditor vereint. Ich muss etwas auswählen sowie auch selbst eintragen können. Ausserdem soll die ComboBox beim draufklicken dynamisch befüllt werden können. Die Werte ermitteln sich aus den Eingaben aus anderen Zellen .
Ich habe auch schon eine Implementierung davon. Habe dazu den CellEditor erweitert.
Meine Vorgehensweise ist: Wenn eine Zelle den Fokus kriegt, dann fülle ich die Combobox mit aktuellen Werten indem ich setItems() aufrufe. Das mache ich in der SetFocus() Methode. Also jedesmal wenn eine Zelle den Fokus kriegt, dann aktualisiert sie die Elemente in der Combo.
Es funktioniert auch bis auf einen hässlichen Bug. Wenn ich in eine Zelle klicke dann wird der Wert, der drin stand gelöscht. Das macht das ganze natürlich unbrauchbar :(

Hat jemand vielleich schon mal etwas in der Art erfolgreich implementiert?

Gruß
Ablake27
 
Hallo,

beim Aufruf der getTableCellEditorComponent-Methode deines CellEditors wird dir
doch der bis dahin gültige Inhalt der Zelle übergeben.
Wenn du nun sicher stellst das sich eben dieser Inhalt als eines der Items in der
ComboBox wiederfindet [ cbox.addItem(value) ] und du dafür sorge trägst das
dieser Eintrag auch der aktuell selektierte ist,dann sollte das doch eigentlich gehen.

Gruß JAdix
 
Hallo,
diese getTableCellEditorComponent-Methode gibt es bei mir nicht. Ist das eine Methode aus dem SWT API? Oder weil ich den CellEditor erweitert habe und nicht den TextCellEditor. Aber das sollte eigentlich nicht stören. Von der Vorgehensweise habe ich es mir so vorgestellt wie Du es beschrieben hast. Trotzdem wird das Textfeld immer leer, obwohl der vorhergehende Wert in die Combo hinzugefügt wird und obwohl der SelectionIndex auf Ihn zeigt. Sogar wenn ich dem Textfeld der Combo sage setText(Stringvalue) passiert nichts. Das ist doch verhext. Das passiert aber erst wenn ich einmal mit setItems() die Werte der Combo geändert habe. Ich rufe danach aber immer sofort setValue().

Hier der code:

protected void doSetFocus() {
comboBox.setFocus();
int index = parentTable.getSelectionIndex();
TableItem activeRow;
switch (columnType) {
case COLUMN_DEF:
break;
case COLUMN_POL:
activeRow = parentTable.getItem(index);
serviceDef = activeRow.getText(columnType-1);
setItems(columnType); // Danach gehts nicht mehr
Object par = result;
doSetValue(par);
comboBox.setText(result);
break;
default:
break;
}

public void setItems(int columnType) {
switch (columnType) {
case COLUMN_DEF:
items = InfoProvider.getDefinitions();
break;
case COLUMN_POL:
items = InfoProvider.getPolicies(serviceDef);
doSetValue(result);
break;
}
populateComboBoxItems();
}

protected void doSetValue(Object value) {
if (value instanceof String) {
this.result = value.toString();
int index = comboBox.indexOf(result);
if (index == -1) {
comboBox.add(result);
selection = comboBox.indexOf(result);
comboBox.select(selection);
comboBox.remove(result);
} else {
selection = comboBox.indexOf(result);
}
}
}
 
Zuletzt bearbeitet:
Hallo,

du arbeitest mit einem JTable, benutzt aber nur eine CellEditor-Implementation und
die Table frist den CellEditor beim setDefaultEditor ? ? Spooky !

oder reden wir jetzt komplett aneinander vorbei ? :confused:

Gruß JAdix
 
Hallo,

Ja, genau. Alles SWT API. Ich benutze auch nicht den CellEditor direkt sondern habe diese Klasse erweitert aus folgendem Grunde.
Bei einem TextCellEditor kann man nur Werte editieren / reinschreiben. Ich brauche aber eine Combo. Beim ComboboxCellEditor hat man zwar die Combo, aber dafür nicht mehr die Möglichkeit etwas reinzuschreiben. Nur auswählen aus der Combo geht. Also habe ich selbst einen "MyCellEditor" gebaut der beides vereint. Funktioniert auch super solange die Werte in den Combos statisch sind. Wenn ich einmal setItems(String[] items) rufe, dann fängt das Elend an.

Gruß
Ablake27
 
Zurück