繁体   English   中英

JFace - 如何根据同一行中另一列的复选框值在 TreeViewer 中只编辑一列?

[英]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所示的复选框

我有两个问题:

  1. 单击选择列的复选框后, ProximityClustersColumn的相应名称ProximityClustersColumn为可编辑状态。 例如:当我点击“Studium Organisieren-Formelles”对应的复选框时,单元格“Studium Organisieren-Formelles”应该可以编辑。

  2. 此外,如图所示,必须进行检查,以便组中只有一个值,其复选框被选中成为可编辑的。 换句话说,对于每一组,只能检查一个类别名称,并且对应的名称应该是可编辑的。 例如:如果您查看第二组,则有两个邻近集群名称,即“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。

  1. 当您的意思是可编辑时,单元格的预期行为是什么。 那些不可编辑的单元格应该有禁用类型的前景色文本,可编辑的可以有正常的前景色,比如黑色。 仅当用户更改焦点(如果支持选项卡)或单击单元格时,最好显示可编辑文本,用户可以在其中选择文本并更改/编辑它。 并按 Enter 键或 Tab Key 程序可以接受更改。 这就是你要找的吗?

  2. 我想我没有得到这个问题。 你能举出上图中的例子吗? 比如什么是群?

我认为EditingSupport对你有用。

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

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

链接中的程序显示了所有可能的与树查看器相关的实现。 将程序复制粘贴到一个新的 java 类中并作为 java 应用程序运行。 这个例子解决了我在实现中遇到的所有与树相关的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM