Я хотел бы знать, существует ли в JGraphX макет, который избегает перекрытия двух ребер, которые начинаются в одной и той же ячейке вершины, но заканчиваются в разных ячейках? Я нашел этот пост- Перекрытие рёбер с помощью JGraphx , который рекомендует использовать mxParallelEdgeLayout
, но этот макет работает только для рёбер, имеющих одинаковую начальную и конечную вершины. Я пробовал другой макет, например mxOrthogonalLayout
, но он тоже не работает. Кто-нибудь знает способ трассировки ребер, которые не перекрываются с другими вершинами и ребрами? Кроме того, мне нужны ячейки вершин в фиксированном месте, поэтому я не могу использовать макет, который изменяет местоположение вершин. Заранее спасибо. Это пример кода с перекрытием:
import com.mxgraph.layout.mxParallelEdgeLayout;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.view.mxGraph;
import javax.swing.*;
public class HelloWorld extends JFrame
{
/**
*
*/
private static final long serialVersionUID = -2707712944901661771L;
public HelloWorld()
{
super("Hello Earth Planet!");
mxGraph graph = new mxGraph();
Object parent = graph.getDefaultParent();
graph.getModel().beginUpdate();
try
{
Object v1 = graph.insertVertex(parent, null, "Hello", 20, 20, 80,
30);
Object v2 = graph.insertVertex(parent, null, "Earth", 240, 20,
80, 30);
Object v3 = graph.insertVertex(parent, null, "Planet!", 480, 20,
80, 30);
Object ed1 = graph.insertEdge(parent, "a", "Edge1", v1, v2);
Object ed2 = graph.insertEdge(parent, "b", "Edge2", v1, v3);
mxParallelEdgeLayout layout = new mxParallelEdgeLayout(graph, 30);
layout.execute(parent);
}
finally
{
graph.setCellsMovable(false);
graph.setCellsEditable(false);
graph.setCellsResizable(false);
graph.setVertexLabelsMovable(false);
graph.setGridEnabled(false);
graph.setCellsCloneable(false);
graph.setCellsDeletable(false);
graph.setCellsResizable(false);
graph.setCellsBendable(false);
graph.setConnectableEdges(false);
graph.setEdgeLabelsMovable(false);
graph.setAllowDanglingEdges(false);
graph.setCellsSelectable(true);
graph.setCellsLocked(true);
graph.setCellsDisconnectable(true);
graph.getModel().endUpdate();
}
mxGraphComponent graphComponent = new mxGraphComponent(graph);
getContentPane().add(graphComponent);
}
public static void main(String[] args)
{
HelloWorld frame = new HelloWorld();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 320);
frame.setVisible(true);
}
}```