Java JGRAP设置无向图

Java JGRAP设置无向图,java,jgrapht,Java,Jgrapht,您好,我一直在互联网上寻找如何在JGraphT中生成无向图的答案,但它不起作用,我有这样的答案: g = new ListenableUndirectedGraph<String, MyEdge>(MyEdge.class); graphAdapter = new JGraphXAdapter<String, MyEdge>(g); g.addVertex("a"); g.addVertex("b"); g.addEdge("a","b"); layout = new

您好,我一直在互联网上寻找如何在JGraphT中生成无向图的答案,但它不起作用,我有这样的答案:

g = new ListenableUndirectedGraph<String, MyEdge>(MyEdge.class);
graphAdapter = new JGraphXAdapter<String, MyEdge>(g);

g.addVertex("a");
g.addVertex("b");
g.addEdge("a","b");

layout = new mxOrganicLayout(graphAdapter);
layout.execute(graphAdapter.getDefaultParent());

component = new mxGraphComponent(graphAdapter);

component.setPreferredSize(new Dimension(dim.width - 50, dim.height - 200));

add(component);
g=新的ListenableUndirectedGraph(MyEdge.class);
graphAdapter=新的JGraphXAdapter(g);
g、 addVertex(“a”);
g、 addVertex(“b”);
g、 附录(“a”、“b”);
布局=新布局(graphAdapter);
执行(graphAdapter.getDefaultParent());
组件=新的mxGraphComponent(graphAdapter);
组件设置首选尺寸(新尺寸(尺寸宽度-50,尺寸高度-200));
添加(组件);

虽然它被定义为无向的,但它显示为定向的

我对您的代码做了一些操作,这应该是可行的

删除箭头的零件位于零件后面

// This part to remove arrow from edge
mxUtils.setCellStyles(graphComponent.getGraph().getModel(),
cells.toArray(), mxConstants.STYLE_ENDARROW, mxConstants.NONE);
因此,完整的代码如下所示,这只是一个示例,其余部分留给您的幻想:

import com.mxgraph.layout.mxCircleLayout;
import com.mxgraph.model.mxGraphModel;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.util.mxConstants;
import com.mxgraph.util.mxUtils;
import org.jgrapht.UndirectedGraph;
import org.jgrapht.ext.JGraphXAdapter;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;

import javax.swing.*;
import java.awt.*;
import java.util.Collection;

public class UndirectedGraphClass extends JFrame {

    public static void main(String[] args) {
        new UndirectedGraphClass();
    }

    private UndirectedGraphClass() {

        JGraphXAdapter<String, DefaultEdge> jgxAdapter;
        UndirectedGraph<String, DefaultEdge> g =
                new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

        g.addVertex("a");
        g.addVertex("b");
        g.addEdge("a", "b");

        jgxAdapter = new JGraphXAdapter<String, DefaultEdge>(g);
        mxGraphComponent graphComponent = new mxGraphComponent(jgxAdapter);
        mxGraphModel graphModel = (mxGraphModel) graphComponent.getGraph().getModel();
        Collection<Object> cells = graphModel.getCells().values();
        // This part to remove arrow from edge
        mxUtils.setCellStyles(graphComponent.getGraph().getModel(),
                cells.toArray(), mxConstants.STYLE_ENDARROW, mxConstants.NONE);
        getContentPane().add(graphComponent);

        mxCircleLayout layout = new mxCircleLayout(jgxAdapter);
        layout.execute(jgxAdapter.getDefaultParent());

        this.setTitle(" some undirected graph ");
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setPreferredSize(new Dimension(400, 400));
        this.pack();
        this.setVisible(true);
    }
}
导入com.mxgraph.layout.mxCircleLayout;
导入com.mxgraph.model.mxGraphModel;
导入com.mxgraph.swing.mxGraphComponent;
导入com.mxgraph.util.mxConstants;
导入com.mxgraph.util.mxUtils;
导入org.jgrapht.UndirectedGraph;
导入org.jgrapht.ext.JGraphXAdapter;
导入org.jgrapht.graph.DefaultEdge;
导入org.jgrapht.graph.SimpleGraph;
导入javax.swing.*;
导入java.awt.*;
导入java.util.Collection;
公共类UndirectedGraphClass扩展了JFrame{
公共静态void main(字符串[]args){
新的UndirectedGraphClass();
}
私有UndirectedGraphClass(){
JGraphXAdapter jgxAdapter;
无向图g=
新的SimpleGraph(DefaultEdge.class);
g、 addVertex(“a”);
g、 addVertex(“b”);
g、 附录(“a”、“b”);
jgxAdapter=新的jgxAdapter(g);
mxGraphComponent graphComponent=新mxGraphComponent(jgxAdapter);
mxGraphModel graphModel=(mxGraphModel)graphComponent.getGraph().getModel();
集合单元格=graphModel.getCells().values();
//此零件用于从边缘移除箭头
mxUtils.setCellStyles(graphComponent.getGraph().getModel(),
cells.toArray(),mxConstants.STYLE_ENDARROW,mxConstants.NONE);
getContentPane().add(graphComponent);
mxCircleLayout布局=新mxCircleLayout(JGXAAdapter);
执行(jgxAdapter.getDefaultParent());
setTitle(“一些无向图”);
此.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
此.setPreferredSize(新维度(400400));
这个包();
此.setVisible(true);
}
}

该解决方案的灵感来自于此。

很抱歉,我只是想了解您想要实现的目标以及哪些目标不起作用?我想在我的面板中显示无向图(没有箭头的边)有没有理由不把它看成是一个复制品?我试过了,但它对我不起作用,因为我有一个按钮来添加边缘和顶点。我现在要尝试一下: