【问题标题】:Disable TreeNode Selection while dragging拖动时禁用 TreeNode 选择
【发布时间】:2016-07-20 14:13:54
【问题描述】:

我有一个 Jtree 和一个自定义 MouseListener/MouseMotionListener 来处理触摸设备上的滚动。

我现在的问题是,当我开始拖动时,当前节点会在我按下鼠标时立即被选中。

问题: 如何在拖动鼠标时禁用自动选择(当我点击它而不拖动时应该选择它)。

我的 DragscrollListener 中的 clickedpressed 函数是空的。

注意:

我还没有编写 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();
    }
}

【问题讨论】:

标签: java swing drag-and-drop jtree mouselistener


【解决方案1】:

要控制拖动完成时所需的行为,请覆盖鼠标在 通过扩展 DragScrollListener。请参阅 cmets 进行澄清:

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

如果代码不够清晰,请不要犹豫。

【讨论】:

  • 感谢您的回答 - 它适用于我想要的行为(单击时选择)我只需要添加单击方法并手动保护 selectionPath,然后再清除选择并设置它他们再次作为选择路径。
  • 我很高兴它有帮助(0: 。对这个问题投了赞成票:我认为它的布局和要求都很好。
猜你喜欢
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 2018-08-09
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多