2014-10-02 39 views
1

我对树视图中的下列cellValueFactory添加文本菜单和dragAndDrop功能:仅显示contextMenu当用户右键点击一个项目

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; 
     } 

    }); 

拖放的伟大工程和文本菜单显示出来,但它表明在树状视图中右击一切。我怎么才能让它只出现在用户实际上右键单击树形视图中的一个项目时?

+0

将上下文菜单添加到单元格而不是树。 – 2014-10-02 09:35:57

+0

您可以将它作为答案发布,我会接受它。再次感谢@james_D :) – miniHessel 2014-10-02 09:44:11

回答

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); 
       } 
      } 
相关问题