Java TreeView没有';t显示项目

Java TreeView没有';t显示项目,java,treeview,swt,jface,Java,Treeview,Swt,Jface,我正在尝试设置树视图的初始输入,但我必须忘记一些东西,因为它不显示任何内容 public class TreeEditor extends OperationDetailsAspectEditor { private TreeViewer fConditionField; private BooleanOperator root; @Override public void createControl(Composite parent, FormToolkit

我正在尝试设置树视图的初始输入,但我必须忘记一些东西,因为它不显示任何内容

public class TreeEditor extends OperationDetailsAspectEditor {
    private TreeViewer fConditionField;
    private BooleanOperator root;

    @Override
    public void createControl(Composite parent, FormToolkit toolkit) {
        createConditionControls(parent, toolkit);
    }

    private void createConditionControls(final Composite parent, FormToolkit toolkit) {
        fConditionField = new TreeViewer(parent);
        fConditionField.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 5));
        fConditionField.setLabelProvider(new ConditionsLabelProvider());
        fConditionField.setContentProvider(new ConditionsContentProvider());
        fConditionField.setUseHashlookup(true);
        fConditionField.setInput(getInitialTreeConditions());
        fConditionField.expandAll();
    }

    private BooleanOperator getInitialTreeConditions(){
        root = new BooleanOperator(Operator.AND);
        return root;
    }
}

public class ConditionsLabelProvider implements ILabelProvider {

    @Override
    public void addListener(ILabelProviderListener paramILabelProviderListener) {}

    @Override
    public void dispose() { }

    @Override
    public boolean isLabelProperty(Object paramObject, String paramString) {return false;}

    @Override
    public void removeListener(
            ILabelProviderListener paramILabelProviderListener) {}

    @Override
    public Image getImage(Object paramObject) {return null;}

    @Override
    public String getText(Object element) {
        if(element instanceof Model){
            return ((Model) element).getDisplayName();
        } else {
            throw unknownElement(element);
        }
    }

    protected RuntimeException unknownElement(Object element) {
        return new RuntimeException("Unknown type of element in tree of type " + element.getClass().getName());
    }
}

public class ConditionsContentProvider implements ITreeContentProvider {

    private static Object[] EMPTY_ARRAY = new Object[0];
    protected TreeViewer viewer;

    @Override
    public void dispose() {
    }

    @Override
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        this.viewer = (TreeViewer) viewer;
    }

    @Override
    public Object[] getElements(Object inputElement) {
        return getChildren(inputElement);
    }

    @Override
    public Object[] getChildren(Object parentElement) {
        if(parentElement instanceof BooleanOperator){
            BooleanOperator operator = ((BooleanOperator) parentElement);
            return concat(operator.getOperators().toArray(), 
                    operator.getExpresions().toArray());
        }
        return EMPTY_ARRAY;
    }

    @Override
    public Object getParent(Object element) {
        if(element instanceof Model) {
            return ((Model)element).getParent();
        }
        return null;
    }

    @Override
    public boolean hasChildren(Object element) {
        return getChildren(element).length > 0;
    }

    protected Object[] concat(Object[] a, Object[] b) {
        int aLen = a.length;
        int bLen = b.length;
        Object[] c = new Object[aLen + bLen];
        System.arraycopy(a, 0, c, 0, aLen);
        System.arraycopy(b, 0, c, aLen, bLen);
        return c;
    }

    protected Object[] concat(Object[]... arrays) {
        Object[] array = arrays[0] != null? arrays[0] : null;
        for(int i = 1; i < arrays.length; i++) {
            array = concat(arrays[i-1], arrays[i]);
        }   
        return array;
    }
}

节点是布尔运算符,叶子是表达式。

向我们展示创建树查看器并进行设置的代码。对不起,我不明白。在
createConditionControls(最终复合父级)
方法中,行:
fConditionField=new TreeViewer(父级)
是创建treeview的地方。我还尝试了
Tree Tree=new Tree(复合,SWT.BORDER | SWT.FULL | SWT.SINGLE);fConditionField=新树查看器(树)但是有相同的结果。那么内容提供者
getElements
被调用了吗?它返回什么?通常不在getElements()中调用getChildren,getElements应该从模型中返回元素。向我们展示创建树查看器并进行设置的代码。抱歉,我不理解。在
createConditionControls(最终复合父级)
方法中,行:
fConditionField=new TreeViewer(父级)
是创建treeview的地方。我还尝试了
Tree Tree=new Tree(复合,SWT.BORDER | SWT.FULL | SWT.SINGLE);fConditionField=新树查看器(树)但是有相同的结果。那么内容提供者
getElements
被调用了吗?它返回什么?通常不在getElements()内调用getChildren,getElements应该从模型返回元素。
public abstract class Model {
    protected BooleanOperator parent;
    protected String displayName;

    public String getDisplayName(){ return displayName; }

    public void setDisplayName(String displayName){
        this.displayName = displayName;
    }

    public BooleanOperator getParent() { return parent; }
    public void setParent(BooleanOperator parent) { this.parent = parent; }

    public Model(String displayName) { this.displayName = displayName; }
    public Model(){}
}

public class BooleanOperator extends Model {
    private Operator operator;

    private List<BooleanOperator> operators;
    private List<Expression> expressions;

    public Operator getOperator() {
        return operator;
    }
    public List<BooleanOperator> getOperators() {
        return operators;
    }
    public List<Expresion> getExpresions() {
        return expresions;
    }

    public BooleanOperator() {
        operators = new ArrayList<BooleanOperator>();
        expresions = new ArrayList<Expresion>();
    }

    public BooleanOperator(Operator operator) {
        this();
        this.operator = operator;
        this.displayName = operator.toString();
    }
}
AND
|- Attribute_1 == value_1
|- Attribute_2 == value_2
    |- OR
        |- Attribute_3 == value_3