MouseListener和JTree

时间:2011-12-26 14:18:22

标签: java swing 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)

ChannelView监听器:

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语句中尝试捕获吗?这也是检查双击的好方法,或者我应该使用不同的方法吗?感谢

2 个答案:

答案 0 :(得分:6)

您的侦听器尝试将节点放在鼠标位置。如果没有任何节点,则tree.getPathForLocation()返回null。只需在调用方法之前测试selPath是否为null:

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

是的,getClickCount()会返回与该事件相关联的点击次数,因此检查它是双击还是简单点击似乎是合适的。

答案 1 :(得分:0)

  

我正在使用鼠标监听器来了解用户何时点击JTree的节点。

请改用TreeSelectionListenerTreeSelectionEvent有一些非常方便的methods用于发现选择了哪些节点。

有关详细信息,请参阅How to Use Trees - Responding to Node Selection