У меня есть JFace Treeviewer, однако он не отображает «корневой» элемент, который передается в качестве входных данных. Показаны только дети корня. Можно ли тоже вывести рут?
Как отобразить корневой элемент в JFace TreeViewer?
comment
покажите свой код, относящийся к просмотрщику дерева.
- person Harry Joy   schedule 12.04.2011
comment
не понимаю, зачем это нужно. в коде нет ничего особенного
- person pdeva   schedule 12.04.2011
Ответы (3)
Вход не определяется как корень TreeViewer. На самом деле средство просмотра дерева не знает, какой из них является корневым, а какой нет. Решение принято contentprovider.getElements(). Скорее всего, я предполагаю, что вы вызываете getChildren() внутри этого метода. Это приводит к возврату дочерних элементов корневых элементов, а не самих корневых элементов.
person
Prakash G. R.
schedule
14.04.2011
getElements() возвращает массив объектов. Если я верну новый Object[]{element}, дерево покажет бесконечно расширяющиеся корневые элементы. каково правильное значение для возврата из getElements() в этом случае?
- person pdeva; 15.04.2011
В javadoc getElements() конкретно указано, что вы не должны возвращать inputElement. Вы устанавливаете корневой элемент в качестве ввода? Вы должны либо создать пустой/невидимый корень (если позволяет ваша модель), либо передать что-то, кроме корневого элемента, в качестве начального ввода. Во втором случае ContentProvider должен иметь возможность определить root из начального ввода.
- person Prakash G. R.; 15.04.2011
Элемент ввода TreeViewer не должен отображаться. Задачу можно решить так:
treeViewer.setInput("root");
И в ContentProvider:
public Object[] getElements(Object arg0) {
return new Object[] { rootItem }; // your root item you want to display
}
person
Harry Siebert
schedule
29.07.2014
Я столкнулся с точно такой же проблемой и решил ее, используя логическое поле treeInputSet
следующим образом, в котором Model
— это класс домена, который вы хотите отобразить в дереве:
// Field to hold whether tree input was set
private boolean treeInputSet = false;
// Other code...
@Override
public Object[] getElements(Object inputElement)
{
if (inputElement instanceof Model)
{
if (treeInputSet)
{
Model model = (Model) inputElement;
return model.getChildren().values().toArray();
}
else
{
treeInputSet = true;
return new Object[] { inputElement };
}
}
return null;
}
person
Sytse Goedemoed
schedule
27.03.2013
-1: Это неправильно. Вы не можете вернуть другой результат на основе предыдущих вызовов. Это абсолютно бессмысленно.
- person Tom Seidel; 27.03.2013