Недавно я реализовал CheckboxTreeViewer
в своем собственном Dialog
. Пока это работает нормально, за исключением того, что дерево не позволяет мне расширять узлы по умолчанию. Это работает только тогда, когда я устанавливаю флажок, как вы можете видеть на следующих изображениях:
Это по умолчанию. Как видите, расширить узел невозможно, хотя у него есть дочерние элементы:
После установки флажка все работает:
Я уже пытался использовать setExpandPreCheckFilters
, но безуспешно:
Composite container = (Composite) super.createDialogArea(parent);
tv = new CheckboxTreeViewer(container, SWT.MULTI | SWT.H_SCROLL| SWT.V_SCROLL);
GridData gridData = new GridData(GridData.FILL_BOTH);
tv.getTree().setLayoutData(gridData);
tv.setContentProvider(new FeaturePropertyDialogContentProvider());
tv.setLabelProvider(new FeaturePropertyDialogLabelProvider());
tv.setAutoExpandLevel(2);
tv.setExpandPreCheckFilters(true);
Любые идеи?
-----------------------------------Обновлять-------------- -----------------------
Я нашел причину проблемы. Я забыл проверить каждый элемент в методе hasChildren. Теперь у меня работает следующий код:
public boolean hasChildren(Object element) {
if (element instanceof ProductLine) {
ProductLine productLine = (ProductLine) element;
if (productLine.getPropertyList() != null) {
return true;
} else {
return false;
}
}
if (element instanceof PropertyList) {
PropertyList propertyList = (PropertyList) element;
if (!(propertyList.getGeneralPlatforms().isEmpty())) {
return true;
} else {
return false;
}
} else if (element instanceof GeneralPlatform) {
GeneralPlatform platform = (GeneralPlatform) element;
if (!(platform.getHardwareElements().isEmpty())) {
return true;
} else {
return false;
}
} else if (element instanceof HardwareElement) {
HardwareElement hw = (HardwareElement) element;
if (!(hw.getHardwareElements().isEmpty())
|| !(hw.getProperties().isEmpty())) {
return true;
} else {
return false;
}
} else {
return false;
}
}
Спасибо за вашу помощь!