If you have a clear sense of where each vertex lies in a 2d space, use a StaticLayout in Jung where you pass a function Vertex ---> Point2D.
You can also mod the vertices to show what your portrayals are currently showing.
You can then use pass another function Edge--->Stroke to color edges when you want them highlighted or not.
What is left then is to integrate MASON and Jung and that's not too hard either, you need to
1) Make Jung set inspectors to MASON controller [page 243 of MASON manual] whenever something is clicked (through mouse plugins)
2) Make Jung graph update in step (calling repaint) by scheduling the update function in the GUIState (calling scheduleImmediatelyAfter)
You could try something goulish where you paint jung graph through jung on a transparent pane and then paste it on top of the display2D, but my guess is that resizes and zooms are going to be a nightmare.
Here are a couple suggestions:
1) Since your graph doesn't change, store a JUNG version and a MASON Network version. Use the NetworkPortrayal2D to visualize it and do your shortest path calls on the JUNG version.
2) To visualize the shortest path, create a separate Network on a separate layer with all the same nodes, but only the edges contained in the shortest path. When you draw the edges for that layer, make them orange, wide, and mostly transparent and it will look like highlighting.
Hope that helps,