带有组合框和复选框的SWT TreeViewer

时间:2015-09-04 21:00:41

标签: java user-interface swt tableviewer treeviewer

我正在寻找一种在表/网格的第一列中显示树的方法,其中包含三个其他列,一个带有组合框,另一个带有复选框。我一直试图用TreeViewer来完成这项工作,但它并不适合我正在寻找的东西。树很好。在Combobox列中,我使用了EditorSupport作为列并在getCellEditor方法中返回了一个ComboboxCellEditor,但是当您在该列中选择一个单元格时,您只能看到列中有一个组合框。然后,当您单击单元格时,所选值将返回到默认空白。复选框列也是如此,只有在选中单元格时才会显示复选框列。我正在寻找能够显示我的树的组合框,并且复选框列始终可见。我查看了TableViewer,但无法在第一列中找到强制进入树的方法。我看过星云网格,但它看起来并不支持组合框。任何关于如何使其中一个像我正在寻找的工作或如果有其他树/表/网格我应该看的提示。感谢。

编辑:这里是EditingSupport类的代码。

private class ComboBoxEditingSupport extends EditingSupport
{
    private ComboBoxCellEditor cellEditor;

    public ComboBoxEditingSupport(ColumnViewer viewer)
    {
        super(viewer);

        cellEditor =
            new ComboBoxCellEditor(((TreeViewer) viewer).getTree(),
                new String[] {
                        "Some String",
                        "Some other String" }, SWT.READ_ONLY);

    }

    @Override
    protected CellEditor getCellEditor(Object element)
    {
        if (element instanceof MyObject
        {
            return cellEditor;
        }
        return null;
    }

    @Override
    protected boolean canEdit(Object element)
    {
        if (element instanceof MyObject
        {
            return true;
        }
        return false;
    }

    @Override
    protected Object getValue(Object element)
    {
        return 0;
    }

    @Override
    protected void setValue(Object element, Object value)
    {
        TreeItem[] ti = treeViewer.getTree().getSelection();
        CCombo combo = ((CCombo) cellEditor.getControl());
        String str = combo.getItem(combo.getSelectionIndex());
        ti[0].setText(1, str);
    }
}

1 个答案:

答案 0 :(得分:1)

您的setValue方法必须更新模型数据中的值(内容提供商返回的数据)。 element setValue参数是您应该更新的特定模型数据对象(MyObject)。

更新值调用后:

getViewer().update(element, null);

让树从模型中更新显示。

尝试直接更新TreeItem将无效。

相关问题