Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUNG图顶点上的鼠标事件_Java_Mouseevent_Jung2 - Fatal编程技术网

Java JUNG图顶点上的鼠标事件

Java JUNG图顶点上的鼠标事件,java,mouseevent,jung2,Java,Mouseevent,Jung2,我已经用JUNG构建了图,但我不确定如何将鼠标操作侦听器添加到图的顶点 下面是我的代码的一个示例部分,我认为它与这个问题最相关 layout = new FRLayout2<GraphNode, GraphEdge>(graph); visualizationViewer = new VisualizationViewer<GraphNode, GraphEdge>(layout, new Dimension(1000, 700)); visualizationView

我已经用JUNG构建了图,但我不确定如何将鼠标操作侦听器添加到图的顶点

下面是我的代码的一个示例部分,我认为它与这个问题最相关

layout = new FRLayout2<GraphNode, GraphEdge>(graph);
visualizationViewer = new VisualizationViewer<GraphNode, GraphEdge>(layout, new Dimension(1000, 700));

visualizationViewer.getModel().getRelaxer().setSleepTime(500);
visualizationViewer.setGraphMouse(new DefaultModalGraphMouse<GraphNode, String>());
        visualizationViewer.getRenderer().getVertexLabelRenderer().setPosition(Renderer.VertexLabel.Position.AUTO);
visualizationViewer.setForeground(Color.black);
layout=新FRLayout2(图形);
visualizationViewer=新的visualizationViewer(布局,新维度(1000700));
visualizationViewer.getModel().getRelaxer().setSleepTime(500);
setGraphMouse(新的DefaultModalGraphMouse());
visualizationViewer.getRenderer().getVertexLabelRenderer().setPosition(Renderer.VertexLabel.Position.AUTO);
visualizationViewer.setForeground(颜色:黑色);
特别是,我想检测图形顶点上的单点和双击,并对其进行操作


注意:我已经看到了一些旧的SO链接,但是没有一个答案对我有帮助。如果有人能给我伪代码或给我指出正确的方向,那将非常有帮助。

我认为完整的示例将比修改代码更好地服务于您和其他人。这里的相关部分是,假设您已经有了一个
VisualizationViewer
,可以使用此代码段:

visualizationViewer.addGraphMouseListener(new GraphMouseListener() {...});
除了处理点击事件外,这还允许您添加新闻和发布事件

这个独立的类创建一个简单的图形,当单击一个顶点时,会在标准输出上打印单击的顶点

导入edu.uci.ics.jung.algorithms.layout.CircleLayout;
导入edu.uci.ics.jung.algorithms.layout.layout;
导入edu.uci.ics.jung.graph.graph;
导入edu.uci.ics.jung.graph.SparseGraph;
导入edu.uci.ics.jung.visualization.VisualizationViewer;
导入edu.uci.ics.jung.visualization.control.GraphMouseListener;
导入edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
导入java.awt.Dimension;
导入java.awt.event.MouseEvent;
导入javax.swing.JFrame;
公共类仪表{
公共静态void main(字符串[]args){
//创建一个测试图
图形=新的SparseGraph();
图.添加顶点(“a”);
图.addVertex(“b”);
图.addVertex(“c”);
图.addVertex(“d”);
添加图形(“a->b”、“a”、“b”);
添加图形(“a->c”、“a”、“c”);
图形添加(“b->c”、“b”、“c”);
图.addEdge(“c->d”,“c”,“d”);
//指标
可视化(图形化);
}
公共静态无效可视化(图形){
//布局图。
布局=新的圆形布局(图形);
layout.setSize(新尺寸(500500));//设置空间的初始大小
VisualizationViewer服务器=新的VisualizationViewer(布局);
setVertexLabelTransformer(新的ToStringLabeller());
//在这里添加侦听器
addGraphMouseListener(新GraphMouseListener(){
@凌驾
已单击公共无效图形(对象v,鼠标事件me){
如果(me.getButton()==MouseEvent.BUTTON1&&me.getClickCount()==2){
System.out.println(“双击”+v);
}
我。消费();
}
@凌驾
压缩的公共空白图(对象v,鼠标事件me){
}
@凌驾
已释放的公共无效图形(对象v,鼠标事件me){
}
});
//显示框架
JFrame=新JFrame(“简单图形视图”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(服务器);
frame.pack();
frame.setVisible(true);
}
}

如果我下面的回答没有提供您所需的信息,请随时发表评论,我将尽力使其更好地满足您的需要。我试图设计我的答案一般,所以有立即可用的代码和一个完整的例子。谢谢!我会尝试一下,然后再给你回复,以防我需要更多的澄清!谢谢我已经编辑了用于双击检测的代码。@Uli Köhler,回答得很好!也可以获取边对象吗?现在我只得到了顶点对象,这对现在来说真的很好。