Java – draw simpleweightedgraph on JPanel

I have a simpleweightedgraph that I want to draw on JPanel in JFrame

I read this article They are using the listenabledirectedgraph, so I tried a listenableundirectedgraph but failed

public class DisplayGraphForm extends javax.swing.JFrame {
    public DisplayGraphForm(SimpleWeightedGraph g) {
       initComponents(); // graPHPanel added to JFrame with BorderLayout (Center)

       JGraphModelAdapter adapter = new JGraphModelAdapter(g);

       JGraph jgraph = new JGraph(adapter);
       graPHPanel.add(jgraph);
     }
}

Solution

It seems that you have to leave some important details from your problem. Without the minimum, complete, and verifiable example, it is difficult to say where the problem is

But please note that the sample you are trying to use is very old JGraph has turned to jgraphx Consider the following example, which demonstrates the link between jgrapht and jgraphx using jgraphxaadapter

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import org.jgrapht.ListenableGraph;
import org.jgrapht.ext.JGraphXAdapter;
import org.jgrapht.graph.DefaultWeightedEdge;
import org.jgrapht.graph.ListenableDirectedWeightedGraph;
import com.mxgraph.layout.mxCircleLayout;
import com.mxgraph.layout.mxIGraphLayout;
import com.mxgraph.swing.mxGraphComponent;

public class DemoWeightedGraph {

    private static void createAndShowGui() {
        JFrame frame = new JFrame("DemoGraph");
        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);

        ListenableGraph<String,MyEdge> g = buildGraph();
        JGraphXAdapter<String,MyEdge> graphAdapter = 
                new JGraphXAdapter<String,MyEdge>(g);

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

        frame.add(new mxGraphComponent(graphAdapter));

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokelater(new Runnable() {
            public void run() {
                createAndShowGui();
            }
        });
    }

    public static class MyEdge extends DefaultWeightedEdge {
        @Override
        public String toString() {
            return String.valueOf(getWeight());
        }
    }

    public static ListenableGraph<String,MyEdge> buildGraph() {
        ListenableDirectedWeightedGraph<String,MyEdge> g = 
            new ListenableDirectedWeightedGraph<String,MyEdge>(MyEdge.class);

        String x1 = "x1";
        String x2 = "x2";
        String x3 = "x3";

        g.addVertex(x1);
        g.addVertex(x2);
        g.addVertex(x3);

        MyEdge e = g.addEdge(x1,x2);
        g.setEdgeWeight(e,1);
        e = g.addEdge(x2,x3);
        g.setEdgeWeight(e,2);

        e = g.addEdge(x3,x1);
        g.setEdgeWeight(e,3);

        return g;
    }
}

Note that myedge extends defaultweightededge to provide a custom toString () that displays edge weights A cleaner solution might be to override mxgraph Convertvaluetostring to check the contents of cells and provide custom labels as needed ToString is a shortcut to the demo, and I also noticed defaultweightededge Getweight () is protected, so it needs to be extended anyway:)

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>