2011-12-07 10 views
2

JUNGグラフのpickイベントを処理する際に問題が発生しています。 GraphMouseListenerインターフェイスを使用して頂点のクリックをリッスンしていますが、エッジを選択するためのサポートを追加する必要があります。ドキュメントでその方法を見つけることができないようです。JUNG - エッジピッキング(マウスイベント)

任意のポインタ?

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

私の記事で述べたように、 'GraphEditorDemo.java'例または他の実施例を参照して下さい[http://stackoverflow.com/questions/8226624/how-do-i-use-jung2 -in-a-mvc-gui](http://stackoverflow.com/questions/8226624/how-do-i-use-jung2-in-a-mvc-gui) –

+0

返信いただきありがとうございます。エッジのクリックをどのようにオーバーライドできますか?私はこれを行う方法を示す例は見つかりませんでした。 – pnsilva

+0

「GraphEditorDemo.java」でもエッジを選ぶ例がいくつかありますが、マウスモードをマウスモードリストからピッキングモードに変更する必要があります。しかし、あなたの欲求がPhotoshopのようなピッキング行動を取ることであれば、それは1つのように振る舞いません。エッジを選んでイベントを聞くことができます。 –

答えて

1

は頂点と辺の選んだ状態に項目リスナーを追加することによってそれを解決していただきありがとうございます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); 

} 
+1

はあなたが作成したクラスの 'EdgePickListener'ですか? – Ankit

0

あなたはまた、独自の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); 
     } 
    } 

}  

、その後、追加

関連する問題