簡體   English   中英

JUNG-邊緣采摘(鼠標事件)

[英]JUNG - edge picking (mouse events)

我在處理JUNG圖上的選擇事件時遇到了一些麻煩。 我一直在使用GraphMouseListener接口來偵聽對頂點的單擊,但是現在我需要添加對拾取邊緣的支持,而我似乎找不到在文檔中找到做到這一點的方法。

有指針嗎?

謝謝

通過將項目偵聽器添加到頂點和邊的拾取狀態來解決此問題:

visualizationViewer.getPickedEdgeState().addItemListener(new EdgePickListener());

您還可以創建自己的MouseEdgeListenerTranslator:

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子類中:

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));
    }

}

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);

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM