2016-07-20 4 views
3

У меня есть Jtree и пользовательский MouseListener/MouseMotionListener, который обрабатывает прокрутку на сенсорных устройствах.Отключить выбор TreeNode при перетаскивании

Моя проблема в том, что когда я начинаю перетаскивание, текущий узел будет мгновенно выбран, когда я нажимаю кнопку мыши.

Вопрос: Как отключить автоматический выбор, когда я перетащить мышью (он должен быть выбран, когда я нажимаю на него без перетаскивания).

Функции clicked и pressed пустые в моем DragscrollListener.

Примечание:

Я не закодировал DragScrollListener - его можно найти here

Пример кода:

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTree; 

public class Test extends JFrame{ 

    public Test(){ 

     JTree tree = new JTree(); 

     JScrollPane pane = new JScrollPane(tree); 

     DragScrollListener ds = new DragScrollListener(tree); 
     tree.addMouseListener(ds); 
     tree.addMouseMotionListener(ds); 

     getContentPane().add(pane); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
     this.setSize(100,100); 

    } 

    public static void main(String[]arghs){ 
     new Test(); 
    } 
} 
+1

1) См. [Обнаружение/исправление для висящей скобки блока кода] (http://meta.stackexchange.com/q/251795/155831). Я больше не мог беспокоиться о фиксации. 2) Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). Первое, что должен был сделать выше код, чтобы сделать его MCVE, - это код для 'DragScrollListener'! –

ответ

2

Чтобы контролировать необходимое поведение, когда сопротивление закончено, переопределение мышь выпущена в DragScrollListener, расширив ее. См. Комментарии к разъяснениям:

public class Test extends JFrame{ 

    public Test(){ 

     JTree tree = new JTree(); 

     JScrollPane pane = new JScrollPane(tree); 

     //To control the needed behavior when drag is finished, override 
     //mouse released in DragScrollListener by extending it 
     MyDragScrollListener ds = new MyDragScrollListener(tree); 

     tree.addMouseListener(ds); 
     tree.addMouseMotionListener(ds); 

     getContentPane().add(pane); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
     this.setSize(100,100); 
    } 

    //Subclass DragScrollListener to override mouse released 
    public class MyDragScrollListener extends DragScrollListener{ 

     public MyDragScrollListener(Component c) { 
      super(c); 
     } 

     @Override 
     public void mouseReleased(MouseEvent e){ 

      //add needed functionality when mouse is released 
      if(e.getSource() instanceof JTree) { 

       System.out.println("source is a JTree"); 
       JTree tree = (JTree)e.getSource(); 

       //clear seelction 
       tree.clearSelection(); 

      } 

      super.mouseReleased(e); 
     } 
    } 

    public static void main(String[]arghs){ 
     new Test(); 
    } 
} 

Не стесняйтесь спросить, недостаточно ли указан код.

+0

Спасибо за ваш ответ - он отлично работает для меня для поведения, которое я хотел (выбор на клике), мне просто нужно было добавить щелчок Methode и вручную безопасно выбратьPath, прежде чем я очистил выбор и снова установил его как выбор дорожка. – mayha

+0

Я рад, что это помогло (0:. Up проголосовал за вопрос: я думаю, что он хорошо выложен и спрошен. – c0der