2016-07-20 30 views
3

Ich habe einen Jtree und einen benutzerdefinierten MouseListener/MouseMotionListener, der Scrollen auf Touch-Geräten behandelt.Deaktivieren Sie die TreeNode-Auswahl beim Ziehen

Mein Problem ist jetzt, dass, wenn ich das Ziehen starte, der aktuelle Knoten sofort ausgewählt wird, wenn ich die Maus drücke.

Frage: Wie kann ich die automatische Auswahl deaktivieren, wenn ich die Maus ziehe (es sollte ausgewählt sein, wenn ich darauf klicke, ohne zu ziehen).

Die Funktionen clicked und pressed sind in meinem DragscrollListener leer.

Hinweis:

ich nicht die DragScrollListener codiert haben - es here gefunden werden kann

Beispielcode:

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) Siehe [Erkennung/Fix für die hängenden Schließwinkel eines Codeblocks] (http://meta.stackexchange.com/q/251795/155831) für ein Problem, das nicht mehr gestört werden konnte. 2) Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. Das erste, was der obige Code benötigt, um es zu einem MCVE zu machen, ist der Code für den 'DragScrollListener'! –

Antwort

2

Um das benötigte Verhalten zu steuern, wenn Drag fertig ist, überschreiben Maus in DragScrollListener freigegeben, indem Sie es erweitern. Siehe Kommentare zur Klarstellung:

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(); 
    } 
} 

Zögern Sie nicht zu fragen, ob der Code nicht klar genug ist.

+0

Vielen Dank für Ihre Antwort - es funktioniert gut für mich für das Verhalten, das ich wollte (Auswahl auf klicken) Ich musste nur den Klick-Methode hinzufügen und manuell die Auswahlpfad sichern, bevor ich die Auswahl löschen und setzen Sie sie wieder als Auswahl Pfad. – mayha

+0

Ich bin froh, dass es geholfen hat (0:.) Ich habe die Frage gewählt: Ich denke, es ist gut angelegt und gefragt. – c0der