仅在用户右键单击项目时显示contextMenu

时间:2014-10-02 09:30:57

标签: javafx treeview

我在treeView上有以下cellValueFactory来添加contextMenu和dragAndDrop功能:

treeView.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {
        @Override

        public TreeCell<String> call(TreeView<String> stringTreeView) {
            TreeCell<String> treeCell = new TreeCell<String>() {
                @Override

                protected void updateItem(String item, boolean empty) {
                    super.updateItem(item, empty);
                    if (!empty && item != null) {
                        setText(item);
                        setGraphic(getTreeItem().getGraphic());

                        final ContextMenu contextMenu = new ContextMenu();

                        MenuItem item2 = new MenuItem("Delete");
                        item2.setOnAction(new EventHandler<ActionEvent>() {
                            public void handle(ActionEvent e) {
                                System.out.println("Here I will add some delete functionality");
                            }
                        });
                        contextMenu.getItems().addAll(item2);

                        treeView.setContextMenu(contextMenu);

                        setContextMenu(contextMenu);

                    } else {
                        setText(null);
                        setGraphic(null);

                    }
                }
            };

            addDragAndDrop(treeCell);
            treeView.setEditable(true);
            return treeCell;
        }

    });

拖放效果很好,contextMenu显示,但它显示在我在树视图中右键单击的所有内容。如何仅在用户实际右键单击树视图中的项目时才显示它?

1 个答案:

答案 0 :(得分:1)

您在TreeViewTreeCell上设置了上下文菜单。只需在TreeCell上设置即可。此外,如果单元格为空,则应将其删除:

            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                if (!empty && item != null) {
                    setText(item);
                    setGraphic(getTreeItem().getGraphic());

                    final ContextMenu contextMenu = new ContextMenu();

                    MenuItem item2 = new MenuItem("Delete");
                    item2.setOnAction(new EventHandler<ActionEvent>() {
                        public void handle(ActionEvent e) {
                            System.out.println("Here I will add some delete functionality");
                        }
                    });
                    contextMenu.getItems().addAll(item2);

                    // remove this line:
                    //treeView.setContextMenu(contextMenu);

                    setContextMenu(contextMenu);

                } else {
                    setText(null);
                    setGraphic(null);

                    setContextMenu(null);
                }
            }
相关问题