2017-01-25 8 views
1

Я строю график с помощью JgraphX. Ориентированный граф представляет дороги и перекрестки. Для каждого маршрута я определяю два ребра, по одному для каждого направления.Перекрывающиеся края с помощью JGraphx

В результате изображение графика имеет два края (представляющие дорогу), перекрывающиеся. Как я могу избежать этого? Есть ли в вершине какие-то вещи, например, точки привязки для краев? Если да, то как я могу их определить?

Это код, который я использую для отображения графа

package it.rex.view; 

import java.awt.BorderLayout; 
import java.awt.EventQueue; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 

import org.jgrapht.ListenableGraph; 
import org.jgrapht.ext.JGraphXAdapter; 
import org.jgrapht.graph.ListenableDirectedGraph; 

import com.mxgraph.layout.mxCircleLayout; 
import com.mxgraph.layout.mxIGraphLayout; 
import com.mxgraph.swing.mxGraphComponent; 

//import grafotest1.DemoWeightedGraph.MyEdge; 
import it.rex.model.Incrocio; 
import it.rex.model.Strada; 
import javax.swing.JScrollPane; 
public class StradarioView extends JFrame { 



    /** 
    * Create the frame. 
    */ 
    public StradarioView(ListenableGraph<Incrocio, Strada> listenableGraph) { 

     // Graph come from JgraphT 
     JGraphXAdapter<Incrocio, Strada> graphAdapter = 
       new JGraphXAdapter<Incrocio, Strada>(listenableGraph); 

     mxIGraphLayout layout = new mxCircleLayout(graphAdapter); 
     layout.execute(graphAdapter.getDefaultParent()); 

     mxGraphComponent graphComponent = new mxGraphComponent(graphAdapter); 
     getContentPane().add(graphComponent, BorderLayout.CENTER); 

     setTitle("Stradario"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     pack(); 


     add(graphComponent); 
    } 
} 

Этот результат с перекрывающимися краями:

overlapped edges

+0

Посмотрите на 'mxParallelEdgeLayout' –

ответ

-1

Вы можете решить, добавив следующее:

new mxCircleLayout(graph).execute(graph.getDefaultParent()); 
new mxParallelEdgeLayout(graph).execute(graph.getDefaultParent()); 
+0

StackOverflow - это английский сайт, а не русский. Также как добавление кода исправляет проблемы пользователей. Кодовые ответы считаются некачественными. – Dijkgraaf

+0

Я перевел ваш ответ, пожалуйста, напишите на английском только в следующий раз. – Oleg