以下是JTree的事件响应:
d_tree.addMouseListener(new MouseListener(){   public void mouseClicked(MouseEvent e){
  
  }
  
  public void mousePressed(MouseEvent e){
  
  }
  
  public void mouseReleased(MouseEvent e){
  
  }
  
  public void mouseEntered(MouseEvent e){
  }

  public void mouseExited(MouseEvent e){
  
  }
但是没有鼠标双击树子节点时才进行事件响应的虚函数,请问如何实现?

解决方案 »

  1.   

           tree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
                public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                    TreeNode node=(TreeNode)evt.getPath().getLastPathComponent();
                    if(node.isLeaf()){
                         //do something
                    }
                }
            });
      

  2.   

    我以为双击你会自己搞定...
    加个全局的用来标识双击的标志位flag,给tree加上mouseClicked监听,双击的话flag为ture,其他的为false,   tree.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                if(evt.getModifiers()==InputEvent.BUTTON1_MASK && evt.getClickCount()==2){
                    flag=true;
                }else{
                    flag=false;
                }
            }
        });    在  if(node.isLeaf()){
      //do something
      }多加一个判断:if(node.isLeaf() && flag){
      flag=true;
      //do something
    }应该可以了
      

  3.   

      楼上的实现还是有问题,因为当你双击一个子节点时,计数为2则flag为true,接着你又单击一个叶节点时,这时候是addMouseListener还是addTreeSelectionListener先监听到事件呢? 
      我添加了打印消息在里面,发现两个监听器并非addMouseListener先监听到事件的。
      看来问题还没搞定哈~
      
      

  4.   

    恩,应该把要做的事放在mouseClicked中做
      

  5.   


    tree.addMouseListener(new FilePopupListener());
    .....
    private class FilePopupListener extends MouseAdapter
    {
    public void mousePressed(MouseEvent me)
    {
    int n=tree.getRowForLocation(me.getX(),me.getY());
    if(n<0) return ;
    TreePath selTree=tree.getPathForRow(n);
       DefaultMutableTreeNode selNode=(DefaultMutableTreeNode)selTree.getLastPathComponent();
       if(selNode.isLeaf())
       {
       if(SwingUtilities.isRightMouseButton(me))
     leaf.show(tree,me.getX(),me.getY());
    }
    else
    {
       if(SwingUtilities.isRightMouseButton(me))
     parent.show(tree,me.getX(),me.getY());
    }
    }
    }
      

  6.   

    public void mouseClicked(MouseEvent e) {
    // TODO Auto-generated method stub
    if(e.getClickCount()==2) // 表示鼠标双击
    System.out.println("mouse 双击了");
    }