当用户双击树上的列时,我试图阻止树折叠或展开。只有在用户点击第一列时才允许它。
请参阅,如果用户双击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条件之外,也可以帮助阻止树扩展/折叠:)
谢谢!
答案 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左侧的小箭头仍然会展开树(应该如此)。