[英]JFace - How can I make only one column editable in TreeViewer based on checkbox value from another column in the same row?
我有一个TreeViewer
,它有两列: ProximityClustersColumn
:它的名称为 String, selectionColumn :它具有如图TreeViewer所示的复选框
我有两个问题:
单击选择列的复选框后, ProximityClustersColumn
的相应名称ProximityClustersColumn
为可编辑状态。 例如:当我点击“Studium Organisieren-Formelles”对应的复选框时,单元格“Studium Organisieren-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);
}
}
我想我需要更多信息才能完整回答。 首先是 Treeviewer 或 Tableviewer。 对我来说它看起来像 TableViewer。
当您的意思是可编辑时,单元格的预期行为是什么。 那些不可编辑的单元格应该有禁用类型的前景色文本,可编辑的可以有正常的前景色,比如黑色。 仅当用户更改焦点(如果支持选项卡)或单击单元格时,最好显示可编辑文本,用户可以在其中选择文本并更改/编辑它。 并按 Enter 键或 Tab Key 程序可以接受更改。 这就是你要找的吗?
我想我没有得到这个问题。 你能举出上图中的例子吗? 比如什么是群?
我认为EditingSupport对你有用。
您可以创建具体的 EditingSupport 类并将其分配给您的列。 它具有“canEdit”方法,您可以通过该方法动态控制编辑。
因此,您需要做的是将布尔标志从复选框状态存储在模型中,或者直接读取复选框状态并返回 false/true 值,这将启用/禁用编辑。
链接中的程序显示了所有可能的与树查看器相关的实现。 将程序复制粘贴到一个新的 java 类中并作为 java 应用程序运行。 这个例子解决了我在实现中遇到的所有与树相关的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.