我正在跟踪official GraphStream tutorial,正如标题所示-我试图通过单击它来获得节点。
这是我的代码:
import org.graphstream.graph.*;
import org.graphstream.graph.implementations.*;
public static void main(String args[]) {
Graph graph = new MultiGraph("Tutorial 1");
graph.setStrict(false);
graph.setAutoCreate( true );
graph.addNode("A").setAttribute("xy", 1, 1);
graph.addNode("B").setAttribute("xy", 5, 5);
graph.addNode("C").setAttribute("xy", 1, 8);
graph.addEdge("AB", "A", "B");
graph.addEdge("BC", "B", "C");
graph.addEdge("CA", "C", "A");
Viewer viewer = graph.display();
viewer.disableAutoLayout();
}
有没有有效的方法来做这件事?
2条答案
按热度按时间4xrmg8kj1#
所以这是我找到的解决方案:
首先,我编写了一个新的
MouseManager
来覆盖默认值,并使用函数findNodeOrSpriteAt(int x, int y)
来“捕捉”被单击的节点:之后,我使用
setMouseManager()
将新的自定义MouseManager添加到我的Viewer
这段代码适用于节点,但我仍然不确定点击它来得到边的正确方法。
然而,一个简单的解决方案可能是获取鼠标单击的坐标,然后迭代节点和check if those coordinates are between 2 nodes。
另一个(更快的)解决方案是-将X1 E1 F1 X附加到边缘:
通过这样做,可以使用我用来检索节点的函数
findNodeOrSpriteAt(int x, int y)
检索边的sprite。bwleehnv2#
对于节点,只需按照官方文档中的方法实现
ViewerListener
:https://graphstream-project.org/doc/Tutorials/Graph-Visualisation/
在OS X上,您可能希望使用
-Dsun.java2d.uiScale=100%
运行,否则坐标可能会出错对于悬停事件,您需要添加
viewer.getDefaultView().enableMouseOptions();