2

由于我找不到任何具体的地方来讨论这个问题,我想我会在这里发帖......我正在使用 graphstream 1.1 ( http://graphstream-project.org/ ),一个用于 java 的图形可视化库,开发数据可视化工具。我需要检索节点上的鼠标点击以显示相关数据,但是在遵循库教程之后,我仍然不清楚如何做到这一点。有没有人可以用更直接的答案来帮助我?我正在关注的教程位于:

http://graphstream-project.org/doc/Tutorials/Graph-Visualisation_1.0/#re​​trieving-mouse-clicks-on-the-viewer

public class Clicks implements ViewerListener {
    protected boolean loop;

    public static void main(String args[]) {
        new Clicks();
    }
    public Clicks() {
    // We do as usual to display a graph. This
    // connect the graph outputs to the viewer.
    // The viewer is a sink of the graph.
        Graph graph = new SingleGraph("Clicks");
        Viewer viewer = graph.display();

    // The default action when closing the view is to quit
    // the program.
        viewer.setCloseFramePolicy(Viewer.CloseFramePolicy.HIDE_ONLY);

    // We connect back the viewer to the graph,
    // the graph becomes a sink for the viewer.
    // We also install us as a viewer listener to
    // intercept the graphic events.
        ViewerPipe fromViewer = viewer.newViewerPipe();
        fromViewer.addViewerListener(this);
        fromViewer.addSink(graph);

    // Then we need a loop to wait for events.
    // In this loop we will need to call the
    // pump() method to copy back events that have
    // already occured in the viewer thread inside
    // our thread.

        while(loop) {
            fromViewer.pump();
        }
    }

    viewClosed(String id) {
        loop = false;
    }

    buttonPushed(String id) {
        System.out.println("Button pushed on node "+id);
    }

    buttonReleased(String id) {
        System.out.println("Button released on node "+id);
    }
}
4

2 回答 2

2

刚刚解决了!我给他们的邮件组发了一封电子邮件。网站上的教程代码缺少一些信息。这三个函数必须是公共无效的,并且必须添加其他“导入”:

import org.graphstream.ui.swingViewer.Viewer;
import org.graphstream.ui.swingViewer.ViewerListener;
import org.graphstream.ui.swingViewer.ViewerPipe;
于 2013-05-28T19:52:31.113 回答
0

这里有一个简单的代码向您展示如何将点击事件添加到 graphstream 库中给定图形的节点。此代码显示如何通过单击更改节点的背景。颜色随机选择:

public class TutoMouseClicked{

    Graph graph;

    public TutoMouseClicked(){
    }    

    public void run(){

        //Build a simple graph with one node
        graph = new SingleGraph("TutoMouseClicked", false, true);
        graph.setAttribute("ui.quality");
        graph.setAttribute("ui.antialias");

        Node n1 = graph.addNode("n1");
        n1.setAttribute("ui.style", "size: 100px;");

        Viewer viewer = graph.display();
        viewer.getDefaultView().setMouseManager(new TutoMouseManage());
    }

     public static void main(String args[]) {        
        new TutoMouseClicked().run();
    }
}

以及实现 MouseManager 接口的 TutoMouseManage 类:

public class TutoMouseManage implements MouseManager{


    /**
     * The view this manager operates upon. 
     */ 
    protected View view; 


    /**
     * The graph to modify according to the view actions. 
     */ 
    protected GraphicGraph graph;


    protected GraphicElement element; 

    @Override
    public void init(GraphicGraph gg, View view) {
        this.graph = gg;
        this.view = view;
        view.addMouseListener(this);
        view.addMouseMotionListener(this);
    }

    @Override
    public void release() {
        view.removeMouseListener(this);
        view.removeMouseMotionListener(this);
    }

    @Override
    public void mouseClicked(MouseEvent me) {
        element = view.findNodeOrSpriteAt(me.getX(), me.getY());
        if(element != null){
            Random r = new Random();
            element.setAttribute("ui.style", "fill-color: rgb("+r.nextInt(256)+","+r.nextInt(256)+","+r.nextInt(256)+");");
        }

    }

    @Override
    public void mousePressed(MouseEvent me) {
    }

    @Override
    public void mouseReleased(MouseEvent me) {
    }

    @Override
    public void mouseEntered(MouseEvent me) {
    }

    @Override
    public void mouseExited(MouseEvent me) {
    }

    @Override
    public void mouseDragged(MouseEvent me) {
    }

    @Override
    public void mouseMoved(MouseEvent me) {
    }

}

您可以修改此代码以获得您需要的内容,添加您想要的任何其他鼠标事件:鼠标释放、鼠标按下、鼠标拖动和所有鼠标事件。

于 2019-04-17T21:19:24.510 回答