Я сделал вид дерева с обычными клетками дерева и клеточной фабрикой для отображения своих пользовательских объектов.
Я хотел иметь возможность редактировать имена объектов в древовидном представлении.
Поэтому я переключился с обычного TreeCell на TextFieldTreeCell, чтобы я мог редактировать имя своих объектов в дереве.
Но теперь методы setGrapic в updateitem не работают.Что я делаю не так?
Также я не уверен, как получить доступ к пользовательскому объекту из метода fromString для редактирования объекта.
treeView.setCellFactory(new Callback<TreeView<MenuItem>, TreeCell<MenuItem>>() {
@Override
public TreeCell<MenuItem> call(TreeView<MenuItem> menuItemTreeView) {
// MenuItemTreeCell menuItemTreeCell = new MenuItemTreeCell();
TextFieldTreeCell<MenuItem> cell = new TextFieldTreeCell<MenuItem>(new StringConverter<MenuItem>() {
@Override
public String toString(MenuItem menuItem) {
if(menuItem==null){
return "";
}
return menuItem.getName();
}
@Override
public MenuItem fromString(String s) {
// todo add code for changing name
return null;
}
})
{
@Override
public void updateItem(MenuItem item, boolean empty) { // empty was b
super.updateItem(item, empty);
// setText((empty || item == null) ? "" : item.getName());
// checking if not null , and then what class to determ icon
if (item != null) {
switch (item.getClass().getSimpleName()) {
case "Group":
setGraphic(new ImageView(caseicon));
break;
case "Item":
setGraphic(new ImageView(basicicon));
break;
case "ClassItem":
setGraphic(new ImageView(classicon));
break;
case "MechanicItem":
setGraphic(new ImageView(mechanicicon));
break;
}
} else {
// no icon
setGraphic(null);
}
super.updateItem(item, empty);
}
};