代码之家  ›  专栏  ›  技术社区  ›  INS

容格图形每次都能出现在同一个地方吗?

  •  3
  • INS  · 技术社区  · 15 年前

    我用的是Jung( http://jung.sourceforge.net/index.html )在Java中绘制图形。软件很棒,但我有一个小问题。如何确保显示的图形每次都是相同的(架构或位置没有更改)?

    更具体地说:图形模型(要表示的数据)不会改变,但每次我点击“查看图形”按钮时,它的表示都会改变:)[有些顶点在其他位置,例如:有时在窗口的上部,有时在下部]

    谢谢您,

    尤利安

    1 回复  |  直到 15 年前
        1
  •  1
  •   Klarth    15 年前

    StaticLayout Point2D constructor

    public StaticLayout(Graph<V,E> graph,
                    org.apache.commons.collections15.Transformer<V,Point2D> initializer)
    

    transformer

    package test;
    
    import java.awt.Dimension;
    import java.awt.geom.Point2D;
    import java.io.IOException;
    
    import javax.swing.JFrame;
    
    import org.apache.commons.collections15.Transformer;
    
    import edu.uci.ics.jung.algorithms.layout.StaticLayout;
    import edu.uci.ics.jung.graph.Graph;
    import edu.uci.ics.jung.graph.SparseMultigraph;
    import edu.uci.ics.jung.visualization.VisualizationViewer;
    
    /**
     * Jung example - vertices appearing in same location
     * 
     * @author Kah
     */
    public class StaticLocation {
    
        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
            // Setup the example graph.
            Graph<Integer, String> basis = new SparseMultigraph<Integer, String>();
            basis.addVertex(Integer.valueOf(0));
            basis.addVertex(Integer.valueOf(1));
            basis.addVertex(Integer.valueOf(2));
            basis.addEdge("Edge 1", Integer.valueOf(0), Integer.valueOf(1));
            basis.addEdge("Edge 2", Integer.valueOf(0), Integer.valueOf(2));
            basis.addEdge("Edge 3", Integer.valueOf(1), Integer.valueOf(2));
    
            Transformer<Integer, Point2D> locationTransformer = new Transformer<Integer, Point2D>() {
    
                @Override
                public Point2D transform(Integer vertex) {
                    int value = (vertex.intValue() * 40) + 20;
                    return new Point2D.Double((double) value, (double) value);
                }
            };
    
            StaticLayout<Integer, String> layout = new StaticLayout<Integer, String>(
                    basis, locationTransformer);
            layout.setSize(new Dimension(250, 250));
            VisualizationViewer<Integer, String> vv = new VisualizationViewer<Integer, String>(
                    layout);
    
            vv.setPreferredSize(new Dimension(250, 250));
    
            JFrame frame = new JFrame("Simple Graph View 2");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(vv);
            vv.setOpaque(false);
            frame.pack();
            frame.setVisible(true);
        }
    }
    

    PersistentLayoutImpl edu.uci.ics.jung.io

    package test;
    
    import java.awt.Dimension;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    import javax.swing.JFrame;
    
    import org.apache.commons.collections15.Transformer;
    
    import edu.uci.ics.jung.algorithms.layout.Layout;
    import edu.uci.ics.jung.algorithms.layout.SpringLayout2;
    import edu.uci.ics.jung.graph.Graph;
    import edu.uci.ics.jung.graph.SparseMultigraph;
    import edu.uci.ics.jung.io.GraphMLReader;
    import edu.uci.ics.jung.io.GraphMLWriter;
    import edu.uci.ics.jung.visualization.VisualizationViewer;
    import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
    import edu.uci.ics.jung.visualization.layout.PersistentLayoutImpl;
    
    /**
     * Jung example - vertices appearing in same location
     * 
     * @author Kah
     */
    public class PersistentVertices
    {
    
        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException
        {
            // Setup the example graph.
            try
            {
                VisualizationViewer<Integer, String> vv = new VisualizationViewer<Integer, String>(
                        getLayout());
    
                vv.setPreferredSize(new Dimension(250, 250));
    
                JFrame frame = new JFrame("Simple Graph View 2");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.getContentPane().add(vv);
                vv.setOpaque(false);
                frame.pack();
                frame.setVisible(true);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    
        private static Layout<Integer, String> getLayout() throws IOException,
                ClassNotFoundException
        {
            Graph<Integer, String> graph = new SparseMultigraph<Integer, String>();
            File source = new File("C:\\layout.dat");
            SpringLayout2<Integer, String> backing = new SpringLayout2<Integer, String>(
                    graph);
            PersistentLayoutImpl<Integer, String> layout = new PersistentLayoutImpl<Integer, String>(
                    backing);
            layout.setSize(new Dimension(250, 250));
    
            // Note that you also need to put the vertices and edges back before
            // restoring.
            graph.addVertex(Integer.valueOf(0));
            graph.addVertex(Integer.valueOf(1));
            graph.addVertex(Integer.valueOf(2));
            graph.addEdge("Edge 1", Integer.valueOf(0), Integer.valueOf(1));
            graph.addEdge("Edge 2", Integer.valueOf(0), Integer.valueOf(2));
            graph.addEdge("Edge 3", Integer.valueOf(1), Integer.valueOf(2));
    
            if (source.exists())
            {
                layout.restore(source.getAbsolutePath());
            }
            else
            {
                layout.persist(source.getAbsolutePath());
            }
            return layout;
        }
    }
    

    推荐文章