2011-12-26 9 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がそれにメソッドを呼び出す前にnullの場合テスト:

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

をそして、それは、ダブルまたはクリックするだけだかどうかをチェックするために適切と思われるので、はい、getClickCount()は、イベントに関連付けられたクリック数を返します。

0

私は、ユーザーがJTreeのノードをクリックしたときを知るためにマウスリスナーを使用しています。

代わりにTreeSelectionListenerを使用してください。 TreeSelectionEventには、どのノードが選択されているかを検出するための非常に便利なものがあります。methods

詳細はHow to Use Trees - Responding to Node Selectionを参照してください。

+0

リスナーをチェックして実装しましたが、ダブルクリックを確認する方法が見つかりませんでしたか? – Giannis

+0

そのビットを逃した、申し訳ありません。 –