Question

J'utilise JUNG ( http://jung.sourceforge.net/index.html) pour dessiner des graphiques dans java. Le logiciel est grand, mais j'ai une petite question. Comment puis-je être sûr que le graphique affiché est chaque fois la même (pas de changement est l'architecture ou la position)?

Pour être plus précis: le modèle graphique (données à représenter) ne change pas, mais sa représentation change chaque fois que je frappe le « Afficher le graphique » bouton :) [certains sommets sont dans d'autres endroits, par exemple: parfois la partie supérieure de la fenêtre, parfois dans la partie inférieure]

Merci,

Iulian

Était-ce utile?

La solution

StaticLayout vous permet de spécifier un sommet Point2D transformateur . Cela vous permettra de contrôler où les sommets sont placés et devraient faire ce que vous voulez faire. Vous devez utiliser les éléments suivants constructeur :

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

Vous aurez besoin de mettre en œuvre votre propre PersistentLayoutImpl pour enregistrer les emplacements des sommets dans un fichier. Cependant, vous devez persister aussi en quelque sorte le graphique pour obtenir quels sommets et les sommets étaient là-bas (cela doit persisté séparément). Il y a nombre de classes pour persister dans le graphique PersistentLayoutImpl :

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;
    }
}

Notez que l'exemple ne persiste pas encore les sommets et les arêtes, comme je l'ai pas eu le temps de comprendre comment utiliser les classes dans edu.uci.ics.jung.io encore.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top