使用更改侦听器javafx仅选择treeview的子项(树项)

时间:2015-12-13 20:15:34

标签: java hibernate treeview

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

我想知道: - 如何仅从列表中选择产品名称而不是类别名称。

    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

1 个答案:

答案 0 :(得分:2)

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

这是我的代码

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