2016-07-20 8 views
3

私は、Jtreeと、タッチデバイスのスクロールを処理するカスタムMouseListener/MouseMotionListenerを持っています。ドラッグ中にTreeNodeの選択を無効にする

私がドラッグを開始すると、マウスを押したときに現在のノードが即座に選択されるようになりました。

質問:私は、マウスをドラッグしたとき、私は自動選択を無効にするにはどうすればよい は(私はドラッグすることなく、それをクリックしたときに、それを選択する必要があります)。

clickedpressedの関数は、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]または[短く、自己完結型の正しい例](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を追加して、手動で選択範囲をクリアして選択をクリアして、パス。 – mayha

+0

私はそれが助けてくれてうれしいです(0:。アップは質問に投票しました:私はそれがうまくレイアウトされていると思います。 – c0der

関連する問題