右键单击JTree选择项目

时间:2014-12-14 10:20:02

标签: java swing events jtree

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

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

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

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

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

1 个答案:

答案 0 :(得分: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);