Search code examples
jgraphtjgraphx

Selection event listener on graph


I would like to implement a selection event listener on a graph to change the style of the selected vertices.

I have tried the following:

    String[] events = 

{mxEvent.ADD, mxEvent.ADD_CELLS, mxEvent.ADD_OVERLAY, mxEvent.AFTER_PAINT,
 mxEvent.ALIGN_CELLS, mxEvent.BEFORE_PAINT, mxEvent.BEFORE_UNDO,
 mxEvent.BEGIN_UPDATE, mxEvent.CELL_CONNECTED, mxEvent.CELLS_ADDED,
 mxEvent.CELLS_FOLDED, mxEvent.CELLS_MOVED, mxEvent.CELLS_ORDERED,
 mxEvent.CELLS_REMOVED, mxEvent.CELLS_RESIZED, mxEvent.CELLS_TOGGLED,
 mxEvent.CHANGE, mxEvent.CLEAR, mxEvent.CONNECT, mxEvent.CONNECT_CELL,
 mxEvent.CONTINUE, mxEvent.DONE, mxEvent.DOWN, mxEvent.END_UPDATE,
 mxEvent.EXECUTE, mxEvent.FIRED, mxEvent.FLIP_EDGE, mxEvent.FOLD_CELLS,
 mxEvent.GROUP_CELLS, mxEvent.INSERT, mxEvent.LABEL_CHANGED,
 mxEvent.LAYOUT_CELLS, mxEvent.MARK, mxEvent.MOVE_CELLS, mxEvent.NOTIFY,
 mxEvent.ORDER_CELLS, mxEvent.PAINT, mxEvent.REDO, mxEvent.REMOVE_CELLS,
 mxEvent.REMOVE_CELLS_FROM_PARENT, mxEvent.REMOVE_OVERLAY, mxEvent.REPAINT,
 mxEvent.RESIZE_CELLS, mxEvent.ROOT, mxEvent.SCALE,
 mxEvent.SCALE_AND_TRANSLATE, mxEvent.SELECT, mxEvent.SPLIT_EDGE,
 mxEvent.START, mxEvent.START_EDITING, mxEvent.STOP, mxEvent.TOGGLE_CELLS,
 mxEvent.TRANSLATE, mxEvent.UNDO, mxEvent.UNGROUP_CELLS, mxEvent.UP,

 mxEvent.UPDATE_CELL_SIZE};

    for (String event : events) {

        jgxAdapter.addListener(event, new mxEventSource.mxIEventListener() {

            @Override
            public void invoke(Object sender, mxEventObject evt) {
                System.out.println(evt.getName());
            }

        });

    }

but the only events that print in the console are:

cellsAdded, addCells, cellsResized, updateCellSize, repaint and cellConnected

How do I catch the selection event with jgraphx or jgrapht ?


Solution

  • The selection event is mxEvent.CHANGE and should be listened to via mxGraphSelectionModel.

    jgxAdapter.getSelectionModel().addListener(mxEvent.CHANGE, new mxIEventListener() {
    
            @Override
            public void invoke(Object sender, mxEventObject evt) {
                mxGraphSelectionModel sm = (mxGraphSelectionModel) sender;
                mxCell cell = (mxCell) sm.getCell();
                if (cell != null && cell.isVertex()) {
                    //do something
                }
            }
    
        });