首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JUNG - edge picking (鼠标事件)

JUNG - edge picking (鼠标事件)
EN

Stack Overflow用户
提问于 2011-12-08 02:50:30
回答 2查看 1.8K关注 0票数 2

我在处理JUNG图上的pick事件时遇到了一些麻烦。我一直使用GraphMouseListener接口来监听顶点上的点击,但现在我需要添加对拾取边的支持,而在文档中似乎找不到这样做的方法。

有什么建议吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-11 20:45:44

通过将项目侦听器添加到顶点和边的拾取状态来解决此问题:

代码语言:javascript
复制
visualizationViewer.getPickedEdgeState().addItemListener(new EdgePickListener());
票数 1
EN

Stack Overflow用户

发布于 2014-11-18 23:31:05

您还可以创建自己的MouseEdgeListenerTranslator:

代码语言:javascript
复制
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Point2D;

import edu.uci.ics.jung.algorithms.layout.GraphElementAccessor;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.visualization.VisualizationViewer;

public class MouseEdgeListenerTranslator<V,E> extends MouseAdapter {

    private VisualizationViewer<V,E> vv;
    private GraphEdgeMouseListener<E> geml;

    public MouseEdgeListenerTranslator(GraphEdgeMouseListener<E> geml, VisualizationViewer<V,E> vv){
        this.geml = geml;
        this.vv = vv;
    }

    private E getEdge(Point2D point){
        Point2D p = point;
        GraphElementAccessor<V,E> pickSupport = vv.getPickSupport();
        Layout<V,E> layout = vv.getGraphLayout();
        E e = null;
        if(pickSupport != null){
            e = pickSupport.getEdge(layout, p.getX(), p.getY());
        }
        return e;
    }

    public void mouseClicked(MouseEvent me){
        E e = getEdge(me.getPoint());
        if(e != null){
            geml.graphClicked(e, me);
        }
    }

    public void mousePressed(MouseEvent me){
        E e = getEdge(me.getPoint());
        if(e != null){
            geml.graphPressed(e, me);
        }
    }

    public void mouseReleased(MouseEvent me){
        E e = getEdge(me.getPoint());
        if(e != null){
            geml.graphReleased(e, me);
        }
    }

}    

然后在GraphEdgeMouseListener中将其添加到您自己的VisualizationViewer子类中:

代码语言:javascript
复制
import edu.uci.ics.jung.visualization.VisualizationModel;
import edu.uci.ics.jung.visualization.VisualizationViewer;

public class MyVisualizationViewer<V,E> extends VisualizationViewer<V,E> {

    public MyVisualizationViewer(VisualizationModel<V,E> visualizationModel, Dimension size){
         super(visualizationModel, size);
     }

     public void addGraphEdgeMouseListener(GraphEdgeMouseListener<E> geml){
         addMouseListener(new MouseEdgeListenerTranslator<V,E>(geml, this));
    }

}

代码语言:javascript
复制
import java.awt.event.MouseEvent; 

public interface GraphEdgeMouseListener<E> {

    void graphClicked(E e, MouseEvent me);
    void graphPressed(E e, MouseEvent me);
    void graphReleased(E e, MouseEvent me);

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

https://stackoverflow.com/questions/8420808

复制
相关文章

相似问题

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