问题描述
我想在 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 (将#修改为@)