Как установить графическое изображение для TextFieldTreeCell - PullRequest
0 голосов
/ 06 декабря 2018

Я сделал вид дерева с обычными клетками дерева и клеточной фабрикой для отображения своих пользовательских объектов.

Я хотел иметь возможность редактировать имена объектов в древовидном представлении.

Поэтому я переключился с обычного 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);


                }
            };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...