java - JUNG:在现有 JPanel 上绘制图表

标签 java graph jung

我从 JUNG 开始,我可以在新创建的 JFrame 的 Jpanel 中绘制图形,但我无法在我正在开发的程序的现有面板中绘制相同的图形。

我使用的函数是这样的:

private void demoGraph() {
        // Graph<V, E> where V is the type of the vertices and E is the type of the edges
        // Note showing the use of a SparseGraph rather than a SparseMultigraph
        Graph<Integer, String> g = new SparseGraph<>();
        // Add some vertices. From above we defined these to be type Integer.
        g.addVertex((Integer) 1);
        g.addVertex((Integer) 2);
        g.addVertex((Integer) 3);
        // g.addVertex((Integer)1);  // note if you add the same object again nothing changes
        // Add some edges. From above we defined these to be of type String
        // Note that the default is for undirected edges.
        g.addEdge("Edge-A", 1, 2); // Note that Java 1.5 auto-boxes primitives
        g.addEdge("Edge-B", 2, 3);

        // Layout<V, E>, VisualizationComponent<V,E>
        Layout<Integer, String> layout = new CircleLayout(g);
        layout.setSize(new Dimension(300, 300));
        VisualizationViewer<Integer, String> vv = new VisualizationViewer<>(layout);
        vv.setPreferredSize(new Dimension(350, 350));
        // Setup up a new vertex to paint transformer...
        Transformer<Integer, Paint> vertexPaint = new Transformer<Integer, Paint>() {
            @Override
            public Paint transform(Integer i) {
                return Color.GREEN;
            }
        };
        // Set up a new stroke Transformer for the edges
        float dash[] = {10.0f};
        final Stroke edgeStroke = new BasicStroke(1.0f, BasicStroke.CAP_BUTT,
                BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f);
        Transformer<String, Stroke> edgeStrokeTransformer = new Transformer<String, Stroke>() {
            @Override
            public Stroke transform(String s) {
                return edgeStroke;
            }
        };
        vv.getRenderContext().setVertexFillPaintTransformer(vertexPaint);
        vv.getRenderContext().setEdgeStrokeTransformer(edgeStrokeTransformer);
        vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
        vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller());
        vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);


        // paint on a JPanel: NOT WORKING
        GraphZoomScrollPane panel = new GraphZoomScrollPane(vv);
        panel.setSize(this.graphPanel.getWidth(), this.graphPanel.getHeight());
        BorderLayout panelMapLayout = new BorderLayout();
        panel.setLayout(panelMapLayout);
        panel.setVisible(true);
        this.graphPanel.add(panel);
        this.graphPanel.revalidate();
        this.graphPanel.repaint();

        // Paint on a new JFrame: perfectly working
        JFrame frame = new JFrame("Simple Graph View 2");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(vv);
        frame.pack();
        frame.setVisible(true);
    }

非常感谢这里的一些指导。

最佳答案

我认为您忘记添加 GUI 面板。请参阅:

frame.getContentPane().add(vv);

应该是:

this.graphPanel.add(vv);
frame.getContentPane().add(this.graphPanel);

关于java - JUNG:在现有 JPanel 上绘制图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18416515/

相关文章:

java - java.awt 矩形的动画未按预期运行

java - 如何确定用于绘制折线图的一系列数字的正确域?

java - 在 JUNG 图中创建冗余重复节点

graph - Titan + d3 用于计算机网络可视化

java - 如何在 Java 中制作 Treelayout 图

java - 如何过滤KNeighborhoodFilter的结果?

java - 制作一个交互式Windows服务

java - Hystrix:提高命令的 maxSemaphoreCount?

java - log4j2 logger.entry() 方法不打印日志消息

android - 如何在 Android 中绘制图表?