Select 树视图的唯一子项(树项)使用更改侦听器 javafx

Select only child item (tree item) of treeview using change listener javafx

我正在创建一个产品列表屏幕,其中产品按类别列出。我这样做很成功,并且我已经实现了一个更改侦听器,它将打印 selected 树项目。 但我只想 select 产品而不是类别。这是我到目前为止完成的代码。

我想知道的事情 :- 如何 select 仅来自列表的产品名称而不是类别名称。

    SessionFactory sessionFactory = null;
    Session session = null;
    TreeItem<String> CategoryrootItem = null;
    TreeItem<String> dummyRoot = new TreeItem<>();

    try {
        sessionFactory = HibernateUtil.getSessionFactory();
        session = sessionFactory.openSession();
        session.beginTransaction();

        /*Select categories from database*/
        List categoryList = session.createQuery("FROM Category").list();
        for (Iterator iterator = categoryList.iterator(); iterator.hasNext();) {
            Category category = (Category) iterator.next();

            CategoryrootItem = new TreeItem<>(category.getCategory_Name());
            Set productList = category.getProducts();

            //access via new for-loop
            for(Object object : productList) {
               ProductHeader productHeader = (ProductHeader) object;
               TreeItem<String> item = new TreeItem<>(productHeader.getProduct_Name());
               CategoryrootItem.getChildren().add(item);
            }
            dummyRoot.getChildren().add(CategoryrootItem);
        }
        treeView.setRoot(dummyRoot);
        treeView.setShowRoot(false);

        session.getTransaction().commit();
    } catch (Exception e) {
        System.out
                .println("populateSupplierList unable to create session : "
                        + e.getMessage());
    }

     treeView.getSelectionModel().selectedItemProperty().addListener( new ChangeListener() {

            public void changed(ObservableValue observable, Object oldValue,
                    Object newValue) {

                TreeItem<String> selectedItem = (TreeItem<String>) newValue;
                System.out.println("Selected Text : " + selectedItem.getValue());
            }

          });

The image gives the of the code. I want the product kaju to be selected but not Dry fruits category

我通过逻辑代码解决了这个问题。我搜索了一个选中的TableItem是否有children。如果它有 children 项,那么它不会被选中,如果它没有 child 项,它将被选中。 那些 TableItem 有 child 项的是一个类别,那些没有的是一个产品。

这是我的代码

  TreeItem<String> selectedItem = (TreeItem<String>) newValue;
    if(selectedItem.getChildren().isEmpty()){
       System.out.println("Its a product");
        }
    else{
       System.out.println("Its a category");
        }