JFace - 如何使基于同一行中另一列的复选框值在TreeViewer中只有一列可编辑? [英] JFace - How can I make only one column editable in TreeViewer based on checkbox value from another column in the same row?

查看:359
本文介绍了JFace - 如何使基于同一行中另一列的复选框值在TreeViewer中只有一列可编辑?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 TreeViewer 它有两列: ProximityClustersColumn :它的名称为String,selectionColumn:复选框,如图所示
TreeViewer



我有两个问题:


  1. 点击选择栏的复选框, c $ c> ProximityClustersColumn 应该可以编辑。
    例如:当我单击对应于Studium organisieren-Formelles的复选框时,单元格Studium organisieren-Formelles应该可以编辑。


  2. p>此外,如图所示,必须进行检查,以便只检查其复选框被选中的组中的一个值是可编辑的。
    换句话说,对于每个组,只能检查一个类别名称,并且相应的名称应该是可编辑的。
    例如:
    如果查看第二组,则有两个邻近集群名称,即InfosfürStudis和Finanzielles im Studium,以及它们各自的复选框。现在,我可以从两个名称中选择一个,通过选择相应的复选框。假设我点击了InfosfürStudis对应的复选框,则只有该单元格可以编辑。


主要思想是:我应该只能从每个组中选择一个名称并对其进行编辑。



我已经尝试了@keyur建议的EditingSupport, 方法根本不被调用。



我的LabelProvider扩展了ColumnLabelProvider并实现了ITableLabelProvider。我的ContentProvider实现了ITreeContentProvider。



EditingSupport会失败吗?

  public class ProximityClustersEditingSupport extends EditingSupport {
private TreeViewer viewer;
private CellEditor编辑器;

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(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);
}
}


解决方案

I认为 EditingSupport 对您有用。



您可以创建具体的EditingSupport类并将其分配给您的列。它有方法canEdit,通过它可以动态控制编辑。



因此,你必须做的是在模型中从复选框状态存储布尔标志或直接读取复选框状态,并返回false / true值,这将启用/禁用编辑。


I have a TreeViewer which has two columns: ProximityClustersColumn: which has names as String, selectionColumn: which has checkbox as shown in the figure TreeViewer

I have two questions:

  1. On clicking the selection column's checkbox, the corresponding name of ProximityClustersColumn should become editable. For eg: When I click on the checkbox corresponding to "Studium organisieren-Formelles", the cell "Studium organisieren-Formelles" should become editable.

  2. Also, as seen in the figure, a check must be made such that only one value in the group, whose checkbox is checked becomes editable. In other words, for each group, only one category name can be checked and that corresponding name should be editable. For eg: If you look at the second group, there are two proximity Cluster names, i.e "Infos für Studis" and "Finanzielles im Studium", along with their respective checkboxes. Now, I can choose one among the two names, by selecting the corresponding checkbox. Suppose, I click on the checkbox corresponding to "Infos für Studis", only that cell should become editable.

The main idea is that : I should be able to select only one name from each group and edit it.

I have tried EditingSupport as suggested by @keyur, but the "canEdit" method is not called at all.

My LabelProvider extends ColumnLabelProvider and implements ITableLabelProvider. My ContentProvider implements ITreeContentProvider.

Is there any reason why EditingSupport will fail?

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);
      }
}

解决方案

I think EditingSupport will be useful for you.

You can create your concrete EditingSupport class and assign it to your column. It has method "canEdit" through which you can control the editing dynamically.

So what you have to do is to store the boolean flag in the model from checkbox status or read the check box status directly and return false/true value , which will enable/disable editing.

这篇关于JFace - 如何使基于同一行中另一列的复选框值在TreeViewer中只有一列可编辑?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆