MouseListener и JTree - PullRequest
       16

MouseListener и JTree

4 голосов
/ 26 декабря 2011

Я использую слушатель мыши, чтобы знать, когда пользователь нажимает на узлы 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 ]

6 голосов
/ 26 декабря 2011

Ваш слушатель пытается получить узел в месте расположения мыши. Если узла нет, null возвращается tree.getPathForLocation(). Просто проверьте, является ли selPath нулевым, перед вызовом метода:

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

И да, getClickCount() возвращает количество кликов, связанных с событием, поэтому представляется целесообразным проверить, является ли это двойным или простым щелчком.

0 голосов
/ 27 декабря 2011

Я использую слушатель мыши, чтобы знать, когда пользователь нажимает на узлы JTree.

Используйте взамен TreeSelectionListenerTreeSelectionEvent есть несколько очень удобных методов для определения, какие узлы были / выбраны.

Подробнее см. Как использовать деревья - в ответ на выбор узла .

...