我正在尝试启动一个简单的 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;
}
}