Кнопка добавления в GraphStream с использованием Java - PullRequest
0 голосов
/ 31 января 2019

Мой код работает следующим образом и напрямую печатает все края графика, но я хочу добавить кнопку при клике прямо в моем окне Graph Stream, и когда я нажимаю один раз на эту одну строку графика, печатается, чем когдаЯ нажимаю снова, другая строка печатается, и так до конца визуализации графика, правильно алгоритм Дейкстры.

Как я могу это сделать?Как добавить кнопку в Graph Stream?

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.graphstream.algorithm.Dijkstra;
import org.graphstream.graph.Edge;
import org.graphstream.graph.Graph;
import org.graphstream.graph.Node;
import org.graphstream.graph.Path;
import org.graphstream.graph.implementations.SingleGraph;

public class DijkstraExample 
{
    public static Graph exampleGraph() 
    {
        Graph g = new SingleGraph("example");

        g.addNode("A").addAttribute("xy", 0, 1);
        g.addNode("B").addAttribute("xy", 1, 2);
        g.addNode("C").addAttribute("xy", 1, 1);
        g.addNode("D").addAttribute("xy", 1, 0);
        g.addNode("E").addAttribute("xy", 2, 2);
        g.addNode("F").addAttribute("xy", 2, 1);
        g.addEdge("AB", "A", "B").addAttribute("length", 14);
        g.addEdge("AC", "A", "C").addAttribute("length", 9);
        g.addEdge("AD", "A", "D").addAttribute("length", 7);
        g.addEdge("BC", "B", "C").addAttribute("length", 2);
        g.addEdge("CD", "C", "D").addAttribute("length", 10);
        g.addEdge("BE", "B", "E").addAttribute("length", 9);
        g.addEdge("CF", "C", "F").addAttribute("length", 11);
        g.addEdge("DF", "D", "F").addAttribute("length", 15);
        g.addEdge("EF", "E", "F").addAttribute("length", 6);

        for (Node n: g)
            n.addAttribute("label", n.getId());
        for (Edge e: g.getEachEdge())
            e.addAttribute("label", "" + (int) e.getNumber("length"));
        return g;
    }

    public static void main(String[] args) 
    {
        Graph g = exampleGraph();
        g.display(false);
        Dijkstra dijkstra = new Dijkstra(Dijkstra.Element.EDGE, null, "length");
        dijkstra.init(g);
        dijkstra.setSource(g.getNode("A"));
        dijkstra.compute();
        for (Node node: g)
            System.out.printf("%s->%s:%10.2f%n", dijkstra.getSource(), node, dijkstra.getPathLength(node));

        for (Node node: dijkstra.getPathNodes(g.getNode("B")))
            node.addAttribute("ui.style", "fill-color: blue;");

        for (Edge edge: dijkstra.getTreeEdges())
            edge.addAttribute("ui.style", "fill-color: red;");

        System.out.println(dijkstra.getPath(g.getNode("B")));

        List < Node > list1 = new ArrayList < Node > ();
        for (Node node: dijkstra.getPathNodes(g.getNode("B")))
            list1.add(0, node);

        List < Node > list2 = dijkstra.getPath(g.getNode("B")).getNodePath();

        dijkstra.clear();

        dijkstra = new Dijkstra(Dijkstra.Element.NODE, null, null);
        dijkstra.init(g);
        dijkstra.setSource(g.getNode("A"));
        dijkstra.compute();

        for (Node node: g)
            System.out.printf("%s->%s:%10.2f%n", dijkstra.getSource(), node, dijkstra.getPathLength(node));

        Iterator < Path > pathIterator = dijkstra.getAllPathsIterator(g.getNode("F"));
        while (pathIterator.hasNext())
            System.out.println(pathIterator.next());
    }
}

1 Ответ

0 голосов
/ 05 марта 2019

Если вы добавляете кнопку для добавления в ваш интерфейс, вам нужно создать свой собственный интерфейс.Вы можете посмотреть этот пример: https://github.com/graphstream/gs-ui-swing/blob/master/src-test/org/graphstream/ui/viewer_swing/test/AllSwingTest.java

У вас есть своя панель, вы можете делать все, что захотите.

...