0

我正在尝试启动一个简单的 JFace 树。

然而,它的表现真的很奇怪。当我setInput()成为一个单一的字符串时,树打开完全空白。但是,当我将输入设置为字符串数组时,效果很好。

LabelProvider这与or无关,ContentProvider因为无论如何它们的行为都是相同的(这是一个非常简单的实验程序)。

setInput()官方允许采取任何Object. 我很困惑为什么它不需要字符串,知道为什么可以帮助我解决生活中的其他问题。

将单个字符串设置为输入:

TreeViewer treeViewerLeft = new TreeViewer(shell, SWT.SINGLE);
treeViewerLeft.setLabelProvider(new TestLabelProvider());
treeViewerLeft.setContentProvider(new TestCompareContentProvider());
treeViewerLeft.expandAll();
treeViewerLeft.setInput(new String("Stooge"));

设置字符串数组:

 TreeViewer treeViewerLeft = new TreeViewer(shell, SWT.SINGLE);
 treeViewerLeft.setLabelProvider(new TestLabelProvider());
 treeViewerLeft.setContentProvider(new TestCompareContentProvider());
 treeViewerLeft.expandAll();
 treeViewerLeft.setInput(new String[]{"Moe", "Larry", "Curly"});

第二个工作,并使用以下提供程序启动树:

public class TestCompareContentProvider extends ArrayContentProvider implements ITreeContentProvider {

    public static int children = 0; 

    public Object[] getChildren(Object parentElement) {
        children++;
        if (children > 20){
            return null;
        }
        return new String[] {"Moe", "Larry", "Curly"};
    }
    public Object getParent(Object element) {
        return "Parent";
    }
    public boolean hasChildren(Object element) {
        if (children >20){
            return false;
        }
        return true;
    }

}

public class TestLabelProvider extends LabelProvider {

    public String getText(Object element){
        return "I'm something";
    }

    public Image getImage(Object element){
        return null;
    }
}
4

1 回答 1

1

你继承getElementsArrayContentProviderand ,它只适用于数组。您应该重写此方法。

我认为你根本不需要扩展ArrayContentProvider

于 2013-05-28T22:18:10.300 回答