【发布时间】: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 层发生任何事件。