【问题标题】:Get associated mouse click from ExpandTree event in SWT从 SWT 中的 ExpandTree 事件中获取关联的鼠标单击
【发布时间】:2014-12-04 23:56:23
【问题描述】:

当用户双击树上的列时,我试图阻止树折叠或展开。仅当用户单击第一列时才应允许。

看,如果用户双击 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 都为零,使我的点检测无用。在 TreeExpand 事件中监听鼠标事件并保持最后一个 x 和 y 在这里检查似乎很容易出错,因为用户也可以使用键盘展开树(因此 x 和 y 可能不会反映用户操作)。我还考虑过添加时间限制来检查这一点,但这似乎是处理问题的不好方法。

如何检测是哪个鼠标事件触发了展开事件?

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

谢谢!

【问题讨论】:

  • 我假设您没有找到防止展开/折叠的方法。我认为您无法阻止 SWT 层发生任何事件。

标签: java swt


【解决方案1】:

我发现有人在此链接 http://www.eclipse.org/forums/index.php/t/257325/ 处说这是一个错误

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2012-03-06
    相关资源
    最近更新 更多