Java 如何在不触发selectionChanged()的情况下为treeviewer设置选择?

Java 如何在不触发selectionChanged()的情况下为treeviewer设置选择?,java,swt,eclipse-rcp,jface,treeviewer,Java,Swt,Eclipse Rcp,Jface,Treeviewer,我正在从事一个EclipseRCP项目。它有几个带有TreeViewer的视图,我使用selectionChanged()方法来处理选择事件。但是,有时我需要以编程方式设置选择。为此,在selectionChanged()方法中,我调用TreeViewer的setSelection()方法来设置所需的选择。此方法激发所有视图的selectionChanged()方法,从而循环调用selectionChanged() 如何从TreeViewer或StructuredViewer中选择项目,而不触发

我正在从事一个EclipseRCP项目。它有几个带有
TreeViewer
的视图,我使用
selectionChanged()
方法来处理选择事件。但是,有时我需要以编程方式设置选择。为此,在
selectionChanged()
方法中,我调用
TreeViewer的
setSelection()
方法来设置所需的选择。此方法激发所有视图的
selectionChanged()
方法,从而循环调用
selectionChanged()


如何从
TreeViewer
StructuredViewer
中选择项目,而不触发其他视图的
selectionChanged()

那么,创建一个触发您当前所处的
侦听器的事件总是一个棘手的情况。我通常是这样做的:

Listener listener = new Listener()
{
    private boolean ignore = false;

    @Override
    public void handleEvent(Event e)
    {
        if(ignore)
            return;

        ignore = true;
        doPotentiallyCyclicStuff();
        ignore = false;
    }
};
这不是一个很好的解决方案,但确实有效



期待这里的替代解决方案,因为这已经困扰了我一段时间。

好吧,创建一个触发您当前所处的
侦听器的事件总是一个棘手的情况。我通常是这样做的:

Listener listener = new Listener()
{
    private boolean ignore = false;

    @Override
    public void handleEvent(Event e)
    {
        if(ignore)
            return;

        ignore = true;
        doPotentiallyCyclicStuff();
        ignore = false;
    }
};
这不是一个很好的解决方案,但确实有效



期待这里的替代解决方案,因为这已经困扰了我一段时间。

好吧,创建一个触发您当前所处的
侦听器的事件总是一个棘手的情况。我通常是这样做的:

Listener listener = new Listener()
{
    private boolean ignore = false;

    @Override
    public void handleEvent(Event e)
    {
        if(ignore)
            return;

        ignore = true;
        doPotentiallyCyclicStuff();
        ignore = false;
    }
};
这不是一个很好的解决方案,但确实有效



期待这里的替代解决方案,因为这已经困扰了我一段时间。

好吧,创建一个触发您当前所处的
侦听器的事件总是一个棘手的情况。我通常是这样做的:

Listener listener = new Listener()
{
    private boolean ignore = false;

    @Override
    public void handleEvent(Event e)
    {
        if(ignore)
            return;

        ignore = true;
        doPotentiallyCyclicStuff();
        ignore = false;
    }
};
这不是一个很好的解决方案,但确实有效




期待着这里的替代解决方案,因为这已经困扰了我一段时间。

我没有看到更好的解决方案。事实上,TreeViewer代码正是这样做的,以避免内部循环。@greg-449-Heh,很高兴知道这一点。谢谢你的信息!在这种情况下,谁在更新忽略值?它总是错误的,为什么会达到doPotentiallyCyclicStuff()@Prasadsdeshande再次阅读if检查并思考一秒钟;)@巴兹搞错了,我没见过比这更好的。事实上,TreeViewer代码正是这样做的,以避免内部循环。@greg-449-Heh,很高兴知道这一点。谢谢你的信息!在这种情况下,谁在更新忽略值?它总是错误的,为什么会达到doPotentiallyCyclicStuff()@Prasadsdeshande再次阅读if检查并思考一秒钟;)@巴兹搞错了,我没见过比这更好的。事实上,TreeViewer代码正是这样做的,以避免内部循环。@greg-449-Heh,很高兴知道这一点。谢谢你的信息!在这种情况下,谁在更新忽略值?它总是错误的,为什么会达到doPotentiallyCyclicStuff()@Prasadsdeshande再次阅读if检查并思考一秒钟;)@巴兹搞错了,我没见过比这更好的。事实上,TreeViewer代码正是这样做的,以避免内部循环。@greg-449-Heh,很高兴知道这一点。谢谢你的信息!在这种情况下,谁在更新忽略值?它总是错误的,为什么会达到doPotentiallyCyclicStuff()@Prasadsdeshande再次阅读if检查并思考一秒钟;)@Baz明白了吗?我的回答有什么反馈吗?@Baz很高兴知道有人面临类似的问题。我以为我做错了什么。我在应用程序中使用了类似的结构。因为它有许多视图,所以使用布尔值处理选择变得非常难以管理。Eclipse应该注意这一点。对我的答案有什么反馈吗?@Baz很高兴知道有人面临类似的问题。我以为我做错了什么。我在应用程序中使用了类似的结构。因为它有许多视图,所以使用布尔值处理选择变得非常难以管理。Eclipse应该注意这一点。对我的答案有什么反馈吗?@Baz很高兴知道有人面临类似的问题。我以为我做错了什么。我在应用程序中使用了类似的结构。因为它有许多视图,所以使用布尔值处理选择变得非常难以管理。Eclipse应该注意这一点。对我的答案有什么反馈吗?@Baz很高兴知道有人面临类似的问题。我以为我做错了什么。我在应用程序中使用了类似的结构。因为它有许多视图,所以使用布尔值处理选择变得非常难以管理。Eclipse应该注意这一点。