Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与JGraphx重叠的边_Java_Jgraphx - Fatal编程技术网

Java 与JGraphx重叠的边

Java 与JGraphx重叠的边,java,jgraphx,Java,Jgraphx,我正在用JgraphX构建一个图形。有向图表示道路和交叉口。对于每条路线,我定义了两条边,每个方向一条 因此,图形的图像具有重叠的两条边(表示道路)。我怎样才能避免这种情况? 顶点是否具有诸如边的锚定点之类的内容?如果是,我如何定义它们 这是我用来显示图形的代码 package it.rex.view; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JButton; import ja

我正在用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);
    }
}
package it.rex.view;
导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.border.EmptyBorder;
导入org.jgrapht.ListenableGraph;
导入org.jgrapht.ext.JGraphXAdapter;
导入org.jgrapht.graph.ListenableDirectedGraph;
导入com.mxgraph.layout.mxCircleLayout;
导入com.mxgraph.layout.mxIGraphLayout;
导入com.mxgraph.swing.mxGraphComponent;
//导入grafotest1.DemoWeightedGraph.MyEdge;
导入it.rex.model.Incrocio;
导入it.rex.model.Strada;
导入javax.swing.JScrollPane;
公共类视图扩展了JFrame{
/**
*创建框架。
*/
公共视图(ListenableGraph ListenableGraph){
//图来自JgraphT
JGraphXAdapter graphAdapter=
新JGraphXAdapter(listenableGraph);
mxIGraphLayout布局=新mxCircleLayout(GraphHadapter);
执行(graphAdapter.getDefaultParent());
mxGraphComponent graphComponent=新mxGraphComponent(GraphHaDapter);
getContentPane().add(graphComponent,BorderLayout.CENTER);
setTitle(“斯特拉达里奥”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
立根(100100450300);
包装();
添加(图形组件);
}
}
这将生成具有重叠边的结果:


您可以通过添加以下内容来解决此问题:

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

您在这里使用了圆形布局

mxIGraphLayout layout = new mxCircleLayout(graphAdapter);
“圆布局”将节点放置在一个圆中,但它与方向相反的两个节点之间的边重叠。相反,您可以尝试使用mxParallelEdgeLayout。如果两条边重叠,这会将它们分开

试试这个:

mxParallelEdgeLayout layout = new mxParallelEdgeLayout(graphAdapter);
下图显示了两个连接的节点,它们在e和b之间有两条边,方向相反。这就是mxParallelEdgeLayout以相反方向显示相同两个节点之间的两条边的方式


希望这有帮助

在我的例子中,查看一下mxParallelEdgeLayout@F.Lumnitz,它会生成一个`java.lang.IllegalArgumentException:image==null!'StackOverflow是英文网站,不是俄文网站。另外,添加该代码如何解决用户问题。只有代码的答案被认为是低质量的。我翻译了你的答案,请下次用英语发布。在我的情况下,我没有帮助much@Gewure你能详细介绍一下你的案子吗?当然可以@Hasal!我为此写了一个实际问题: