JUNG - выбор края (события мыши)

У меня возникли проблемы с обработкой событий выбора на графиках JUNG. Я использовал интерфейс GraphMouseListener для прослушивания щелчков по вершинам, но теперь мне нужно добавить поддержку выбора ребер, и я не могу найти способ сделать это в документации.

Любые указатели?

Спасибо


person pnsilva    schedule 07.12.2011    source источник
comment
Обратитесь к примеру GraphEditorDemo.java или другим примерам, упомянутым в моем сообщении http://stackoverflow.com/questions/8226624/how-do-i-use-jung2-in-a-mvc-gui   -  person ee.    schedule 08.12.2011
comment
Спасибо за ответ. Как я могу переопределить щелчок по краям? Я не нашел примеров, показывающих, как это сделать.   -  person pnsilva    schedule 08.12.2011
comment
Есть несколько примеров выбора ребер, даже в GraphEditorDemo.java... но вам нужно изменить режим мыши из списка режимов мыши на режим выбора. Но если вы хотите иметь поведение выбора в стиле Photoshop, то оно не будет вести себя как таковое. Это просто позволяет вам выбрать край и прослушать его событие.   -  person ee.    schedule 09.12.2011
comment
Но какой слушатель позволит мне реализовать выбор края? Я вижу GraphMouseListener в примерах, но я могу выбирать вершины только с ними.   -  person pnsilva    schedule 10.12.2011


Ответы (2)


Решил это, добавив прослушиватели элементов к выбранным состояниям вершин и ребер:

visualizationViewer.getPickedEdgeState().addItemListener(new EdgePickListener());
person pnsilva    schedule 11.12.2011
comment
это EdgePickListener класс, который вы создали? - person Ankit; 06.07.2012

Вы также можете создать свой собственный 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);
        }
    }

}    

а затем добавьте его в свой собственный подкласс VisualizationViewer в GraphEdgeMouseListener:

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

}
person user4266231    schedule 18.11.2014