从SWT中的ExpandTree事件中获取相关的鼠标单击

时间:2014-12-04 12:54:39

标签: java swt

当用户双击树上的列时,我试图阻止树折叠或展开。只有在用户点击第一列时才允许它。 checkboxtree

请参阅,如果用户双击node2 world1上的复选框,则树会展开或折叠。我不希望这种情况发生。我的树需要SWT.FULL_SELECTION才能检测到每个列的点击次数,因此无法前往。

我的听众看起来像这样

tree.addTreeListener(new TreeListener() {
        @Override
        public void treeExpanded(TreeEvent e) {
            TreeItem parent = (TreeItem) e.item;
            Point p =  new Point (e.x, e.y);
            int column = CheckboxClickListener.getColumn(p,parent);
            if (column > 0) {
                e.doit = false;
            }
        }

        @Override
        public void treeCollapsed(TreeEvent e) {
             TreeItem parent = (TreeItem) e.item;
             Point p =  new Point (e.x, e.y);
             int column = CheckboxClickListener.getColumn(p,parent);
             if (column != 0) {
                 e.doit = false;
             }
        }
    });

问题是,生成单击的鼠标事件与展开树的TreeEvent不同。因此,e.x和e.y都为零,使得我的Point检测无用。在TreeExpand事件中监听鼠标事件并保持最后一个x和y检查此处似乎容易出错,因为用户也可能使用键盘扩展树(因此x和y可能不反映用户操作)。我还考虑添加一个时间限制来检查,但似乎是一个处理问题的坏方法。

如何检测哪个鼠标事件触发了expand事件?

PS:e.doit = false什么都不做,即使在if条件之外,也可以帮助阻止树扩展/折叠:)

谢谢!

1 个答案:

答案 0 :(得分:0)

我发现有人说这是此链接http://www.eclipse.org/forums/index.php/t/257325/

的错误

以下代码阻止树在双击时展开,但我不确定为什么或有什么副作用。

tree.addListener (SWT.MeasureItem, new Listener(){
        @Override
        public void handleEvent(Event event) {}
    });

双击ANY列时停止扩展。单击TreeItem左侧的小箭头仍然会展开树(应该如此)。