У меня есть TreeViewer
с двумя столбцами: ProximityClustersColumn
: с именами в виде String, selectionColumn: с флажком, как показано на рисунке Дерево просмотра
У меня есть два вопроса:
При установке флажка столбца выбора соответствующее имя
ProximityClustersColumn
должно стать редактируемым. Например: когда я нажимаю на флажок, соответствующий «Studium organisieren-Formelles», ячейка «Studium organisieren-Formelles» должна стать редактируемой.Кроме того, как видно из рисунка, необходимо сделать проверку так, чтобы только одно значение в группе, чей флажок установлен, стало редактируемым. Другими словами, для каждой группы можно проверить только одно имя категории, и это соответствующее имя должно быть редактируемым. Например: если вы посмотрите на вторую группу, там есть два имени кластера близости, то есть «Infos für Studis» и «Finanzielles im Studium», вместе с соответствующими флажками. Теперь я могу выбрать одно из двух имен, установив соответствующий флажок. Предположим, я нажимаю на флажок, соответствующий «Infos für Studis», только эта ячейка должна стать редактируемой.
Основная идея заключается в следующем: я должен иметь возможность выбирать только одно имя из каждой группы и редактировать его.
Я пробовал EditingSupport, предложенный @keyur, но метод «canEdit» вообще не вызывается.
Мой LabelProvider расширяет ColumnLabelProvider и реализует ITableLabelProvider. Мой ContentProvider реализует ITreeContentProvider.
Есть ли причина, по которой EditingSupport не работает?
public class ProximityClustersEditingSupport extends EditingSupport{
private TreeViewer viewer;
private CellEditor editor;
public ProximityClustersEditingSupport(ColumnViewer columnViewer, TreeViewer treeViewer) {
super(columnViewer);
this.viewer = treeViewer;
this.editor = new TextCellEditor(treeViewer.getTree());
}
@Override
protected CellEditor getCellEditor(Object element) {
return new TextCellEditor();
}
@Override
protected boolean canEdit(Object element) {
return true;
}
@Override
protected Object getValue(Object element) {
if(element instanceof ProbeSort)
return ((ProximityClusters)element).proximityClusterNames;
return element;
}
@Override
protected void setValue(Object element, Object value) {
if (element instanceof ProbeSort)
{
((ProximityClusters)element).setProximityClusterNames(String.valueOf(value));
}
viewer.update(element, null);
}
}