右键单击JTree选择项目

Spe*_*505 4 java events swing jtree

我知道如何从鼠标左键单击所选项目中获取项目.我可以用TreeSelectionListener.

tree.addTreeSelectionListener(new TreeSelectionListener(){
    @Override
    public void valueChanged(TreeSelectionEvent tse) {
        DefaultMutableTreeNode node = 
                (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
    }
});
Run Code Online (Sandbox Code Playgroud)

但我需要用鼠标右键单击项目.显示与单击的项目相关的弹出菜单.我试过这个:

private void treeClicked(java.awt.event.MouseEvent evt) {
    if(SwingUtilities.isRightMouseButton(evt)){
        this.listRightClickMenu.show(this,evt.getX(),evt.getY());
            DefaultMutableTreeNode node = 
        (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
    }
}                            
Run Code Online (Sandbox Code Playgroud)

但是如果用户用右键单击项目就会出现问题.右键单击不选择项目.如何按事件坐标选择项目或如何解决这个问题?主要我需要获取被点击的对象,如果可能的话,没有选择项目.

Mai*_*kov 10

使用此MouseListener:

MouseListener ml = new MouseAdapter() {
     public void mousePressed(MouseEvent e) {
         if(SwingUtilities.isRightMouseButton(e)){
         int selRow = tree.getRowForLocation(e.getX(), e.getY());
         TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
                 tree.setSelectionPath(selPath); 
                 if (selRow>-1){
                    tree.setSelectionRow(selRow); 
                 }
     }
 };
 tree.addMouseListener(ml);
Run Code Online (Sandbox Code Playgroud)