在 treeViewer 上添加按钮

问题描述

我想在 TreeViewer 的某些行上添加一个按钮。为此,我使用了在论坛上看到的一种方法,该方法适用于 TableViewer。

我已经在我想要按钮所在的列上实现了我自己的标签提供程序。所以我重写了调用我的方法 addButton(cell) 的类 update(ViewerCell cell):

(为了更好的理解,我简化了代码

public class SelectvariableButtonLabelProvider extends ColumnLabelProvider {

@Override
public void update(ViewerCell cell) {
    if(...){
       addButton(cell);
    }
}

private void addButton(ViewerCell cell) {
    TreeItem item = (TreeItem) cell.getItem(); 
    Button btn = new Button((Composite) cell.getViewerRow().getControl(),SWT.NONE); 
    btn.setText(" select variable ");
    
    //action when the button is clicked
    btn.addListener(SWT.Selection,new SelectvariableButtonListener(tree,DataTypeTreeUtils.getTreeNodeDataTypeInstance(cell.getElement()),viewer));

    TreeEditor editor = new TreeEditor(item.getParent());
    editor.grabHorizontal = true;
    editor.grabVertical = true;
    // editor.horizontalAlignment = SWT.RIGHT;
    editor.minimumWidth = btn.getSize().x + 110;
    editor.setEditor(btn,item,cell.getColumnIndex());
    editor.layout();
}
}

它几乎可以工作了。除了当我想扩展列时按钮列的按钮是重复的。 screenshot of the bug

左侧“按钮列”:完全正常工作。这些按钮是功能性的,它们可以适应树查看器中节点的扩展。

右侧的“按钮列”:固定在查看器上,按钮不完全起作用。当我想扩展或不扩展树中的节点时,按钮不再对应于它们的行。 (这些也是前台的按钮)。

所以我不想有可能由于错误而出现的正确列。我认为这可能是由于按钮被初始化为复合:

Button btn = new Button((Composite) cell.getViewerRow().getControl(),SWT.NONE);

或者仅仅是因为按钮在树查看器上时只是在窃听?同样的方法也适用于表格查看器。

以防万一,如果有帮助,这是查看者的声明:

viewer = new TreeViewer(treeContainer,SWT.FULL_SELECTION);
    viewer.setContentProvider(new TreeNodeTreeContentProvider());
    viewer.setLabelProvider(new CustomColumnLabelProvider());
    viewer.getTree().setHeaderVisible(true);
    viewer.getTree().setLinesVisible(true);

这是我要添加按钮的列的声明:

//column with the buttons "select variable"
    TreeViewerColumn viewerSetValueColumn = new TreeViewerColumn(viewer,SWT.NONE);
    viewerSetValueColumn.getColumn().setWidth(110);
    viewerSetValueColumn.setLabelProvider(new SelectvariableButtonLabelProvider(viewer,getAllVariables()));

编辑: 我想在我的 treeViewer 的一列的某些行中有按钮。但我希望它们始终可见,所以我想避免使用编辑支持。 我已使用 LabelProvider 来完成此操作,但它导致了错误 (screenshot of the bug)。

有谁知道如何使用 labelProvider 向 treeViewer 添加按钮?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...