【发布时间】:2016-08-13 05:24:47
【问题描述】:
我有一个TreeViewer,它有两列:ProximityClustersColumn: 名称为 String,selectionColumn: 有复选框,如图
TreeViewer
我有两个问题:
单击选择列的复选框后,
ProximityClustersColumn的相应名称应变为可编辑。 例如:当我点击“Studiumorganisieren-Formelles”对应的复选框时,单元格“Studiumorganisieren-Formelles”应该变成可编辑的。此外,如图所示,必须进行检查,以使组中只有一个复选框被选中的值变为可编辑。 换句话说,对于每个组,只能检查一个类别名称,并且对应的名称应该是可编辑的。 例如: 如果您查看第二组,则有两个邻近集群名称,即“Infos für Studis”和“Finanzielles im Studium”,以及它们各自的复选框。现在,我可以通过选中相应的复选框在两个名称中选择一个。假设,我点击“Infos für Studis”对应的复选框,只有那个单元格应该变成可编辑的。
主要思想是:我应该只能从每个组中选择一个名称并对其进行编辑。
我按照@keyur 的建议尝试了EditingSupport,但根本没有调用“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);
}
}
【问题讨论】:
标签: java checkbox swt treeviewer