2011-12-26 80 views
4

我使用鼠标侦听器来了解用户何时单击JTree的节点。当用户点击一个节点的扩展箭头尽管(查看孩子的)以下异常被抛出:MouseListener和JTree

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at Core.ChannelView$1.mousePressed(ChannelView.java:120) 
    at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:263) 
    at java.awt.Component.processMouseEvent(Component.java:6370) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 

峡听众:

MouseListener ml = new MouseAdapter() { 

      public void mousePressed(MouseEvent e) { 
       TreePath selPath = tree.getPathForLocation(e.getX(), e.getY()); 
       if (e.getClickCount() == 1) { 
line 120>>>>>  System.out.println(selPath.getLastPathComponent()); 

       } else if (e.getClickCount() == 2) { 
        System.out.println("Double" +selPath.getLastPathComponent()); 
       } 
      } 
     }; 
     tree.addMouseListener(ml); 

任何建议,我应该如何处理这种情况?我是否应该简单地在if语句里面试一下?此外,这是一个检查双击的好方法,或者我应该用不同的方法来做到这一点?谢谢

回答

6

您的监听器试图获取鼠标位置的节点。如果没有任何节点,则返回空值tree.getPathForLocation()。只是测试,如果selPath是调用一个方法就可以了之前空:

if (selPath == null) { 
    System.out.println("No node at this location"); 
} 
else { 
    if (e.getClickCount() == 1) { 
    ... 
} 

是的,getClickCount()返回与该事件相关的点击数,因此,如果它是一个双或简单的点击似乎是适当的检查。