首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖图流的DefaultMouseManager

覆盖图流的DefaultMouseManager
EN

Stack Overflow用户
提问于 2022-05-11 17:29:10
回答 2查看 49关注 0票数 1

我使用GraphStream显示一个区域的地图,并尝试从默认的MouseManager DefaultMouseManager继承并覆盖mouseClicked方法,以便在单击节点时会发生以下情况:

  1. 节点的颜色将发生变化。
  2. 节点的标签将显示。
  3. 节点的数据将显示在终端中。

我确实知道该方法有效,因为该节点的数据确实被打印到终端上,但我认为其他一些鼠标事件会重新绘制节点并重新隐藏标签,这样在单击节点时它们就不会改变。

这是我的鼠标管理员代码:

代码语言:javascript
复制
public class CustomMouseManager2 extends DefaultMouseManager {
    protected View view;
    protected GraphicGraph graph;
    private GraphicElement focusedNode;

    @Override
    public void init(GraphicGraph graph, View view) {
        super.init(graph, view);
        .
        .
        .
    }

    @Override
    public void mouseClicked(MouseEvent e) {

        GraphicElement currentNode = view.findNodeOrSpriteAt(e.getX(), e.getY());

        if(currentNode != null){
            OGraph graph = OGraph.getInstance();

            Random r = new Random();
            currentNode.setAttribute("ui.style", "fill-color: red; text-mode: normal;");
            ONode oNode = graph.getNode(Long.parseLong(currentNode.getLabel()));
            System.out.println(oNode.toString());

        }

        if(focusedNode!= null)
            focusedNode.setAttribute("ui.style", "fill-color: black;size: 10px, 10px; text-mode: hidden;");

        focusedNode = currentNode;
    }
}

在调用我的DefaultMouseManager之后,我尝试检查基类mouseClicked中的哪些方法被调用,这样我也可以重写它们,但是很多方法都需要遵循。

是否有一种优雅的方法来确保在基类中的所有其他方法之后执行我的更改?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-12 09:37:09

因此,类似于这个问题的事情发生了,mouseClicked()方法被调用了两次。

在我的代码中,我将前一个节点重新绘制为黑色,并在单击一个新节点后隐藏它的标签。因此,当mouseClicked()方法被调用两次时,第一次调用改变了节点的外观,第二次调用改变了节点的外观。

在这种情况下,一个简单的修复方法是检查前一个节点和当前节点是否相同。将此if(focusedNode!= null)替换为

代码语言:javascript
复制
if(focusedNode!= null && focusedNode != currentNode)

但是一个更简单的解决方案将是理解为什么这个方法会被两次调用。

我的猜测是,这与继承有关,但我不确定。

票数 0
EN

Stack Overflow用户

发布于 2022-05-11 18:46:03

是否有一种优雅的方法来确保在基类中的所有其他方法之后执行我的更改?

阅读文档并查看DefaultMouseManager中的代码。我在googled上搜索了DefaultMouseManager,查看了文档,遍历了不同接口的继承,直到我找到了描述操作顺序的MouseListener。然后我看了一下mouseClicked和mouseReleased,因为它们最后会被调用,mouseClicked是空的,所以会留下mouseReleased和其中调用的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72205266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档