我有一个接口ITreeListener,它有一个抽象方法doubleClick()和一个实现此接口并覆盖doubleClick()方法的类。 doubleClick正在树上完成。
public class example implements ITreeListener {
TreeViewer viewer;
TreeListener treeListener = new TreeListener(viewer); //call constructor of another class (TreeListener)
treeListener.addListener(this);
@override
public void doubleClick() {
IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
Object item = ((IStructuredSelection) selection).getFirstElement();
}
在上面的代码中,getSelection()返回TreeSelection,但getFirstElement()返回null。
我有另一个类(TreeListener),我调用“example”类的doubleClick()方法。 TreeListener类实现IDoubleClickListener接口并覆盖IDoubleClickListener的方法doubleClick()。我有这种实现的原因是我将在TreeListener类的doubleClick()方法中有一个公共代码,其中双击展开/折叠树项目和我自己定义的方法,使用ITreeListener接口的doubleClick()将代码中的double单击没有任何子项的树项将打开树项以修改其名称。这是我的TreeListener类:
public class TreeListener implements IDoubleClickListener {
final TreeViewer viewer;
ListenerList treeListeners = new ListenerList();
public TreeListener(TreeViewer viewer) {
this.viewer = viewer;
viewer.addDoubleClickListener(this);
}
public void addListener(ITreeListener treeListener) {
treeListeners.add(treeListener);
if (treeListeners != null) {
Object[] listeners = treeListeners.getListeners();
for (int i = 0; i < listeners.length; ++i) {
treeListener = (ITreeListener) listeners[i];
treeListener.doubleClick(); \\calls doubleClick() method of example class
}
}
}
// Expands/Collapses the tree item
@Override
public void doubleClick(DoubleClickEvent event) {
//logic for expanding/collapsing tree items
}
在上面的代码中,如果调用 treeListener.doubleClick(); 在重写方法doubleClick()内,例如:
// Expands/Collapses the tree item
@Override
public void doubleClick(DoubleClickEvent event) {
//logic for expanding/collapsing tree items
treeListener.doubleClick(); \\this call works fine
}
但是如果调用 treeListener.doubleClick(); 在addListener方法的for循环中,那么示例类的getFirstElement()将返回null。为什么会这样?我是否必须在addListener()方法中通知侦听器?如果是这样我该怎么做?如果调用 treeListener.doubleClick(); 在另一个方法中,则行为会发生变化吗?有人可以建议我如何继续。
感谢。