Java – prezentacja biblioteki JUNG

24.12.2009 - Michał Karpiński
TrudnośćTrudność

Krótki przepis na graf

Na początek pokażę jak łatwo jest stworzyć i wyświetlić graf używając biblioteki JUNG. Studiując poniższy kod nauczysz się podstaw posługiwania się nową biblioteką.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import edu.uci.ics.jung.algorithms.layout.*;
import edu.uci.ics.jung.graph.*;
import edu.uci.ics.jung.visualization.*;
 
import org.apache.commons.collections15.*;
 
import java.awt.*;
import javax.swing.*;
 
public class SimpleGraph extends JFrame {
  public SimpleGraph (){
    super("Mój pierwszy graf");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    Graph g = getGraph();
    VisualizationViewer<Integer,String> vv = 
     new VisualizationViewer<Integer,String>(new FRLayout(g),
     new Dimension (300,200));
    getContentPane().add(vv);
 
    pack();
    setSize (new Dimension (400, 300));
    setVisible(true);
  }
 
  public Graph getGraph() {
    Graph<Integer, String> g = new SparseGraph<Integer, String>();
    g.addVertex((Integer)1);
    g.addVertex((Integer)2);
    g.addVertex((Integer)3);
    g.addEdge("Edge-A", 1, 2);
    g.addEdge("Edge-B", 2, 3);
    g.addEdge("Edge-C", 3, 1);
    return g;
  }
}

Przyjrzyjmy się bliżej ważniejszym fragmentom kodu:

  • 1-5 linia: importujemy nowe pakiety

  • 15 linia: tworzymy graf używając pomocniczej metody getGraph() i przypisujemy go do zmiennej g

  • 16 linia: tworzymy obiekt klasy VisualisationViewer, która definiuje prostokątny obszar, w którym renderowany będzie graf. Obszar ten będziemy nazywali płótnem (ang. canvas)

  • 19 linia: dodajemy obiekt klasy VisualisationViewer do okna. Ta operacja jest możliwa, ponieważ VisualisationViewer dziedziczy po JPanel

  • 26-35 linia: definicja pomocniczej funkcji getGraph(). Właśnie w tym miejscu tworzymy nasz graf. Kluczowa jest linia 27, w której tworzymy obiekt implementujący interfejs Graph przy okazji określając sposób nazywania wierzchołków i krawędzi ( Integer - wierzchołki ,String - krawędzie). Istnieje wiele klas implementujących interfejs Graph (o których opowiem niebawem), lecz na potrzeby naszego przykładu wybrałem klasę SparseGraph. W kolejnych krokach tworzymy kilka wierzchołków i łączymy je ze sobą.

Warto też zauważyć, że rozmiar okna jest nieco większy niż rozmiar obiektu VisualizationViewer. Gdyby było na odwrót to jest szansa, że nie zauważyłbyś tworzonego grafu.

Program działa, graf się wyświetla, ale w którym miejscu kodu ustawiane są obiekty na ekranie ?

Pewnie zauważyłeś, że dodając węzły do grafu nie określa się ich położenia na ekranie i właśnie to jest jedna z większych zalet naszej biblioteki. JUNG dostarcza kilka gotowych algorytmów, które automatycznie rozmieszczają węzły na ekranie. Taki sposób rozmieszczenia nazywa się Layout. Na rysunku poniżej jest graf wyrenderowany w dwóch różnych Layout-ach: Radial Layout oraz Ballon Layout. Oczywiście Layout można zmieniać w dowolnym momencie działania programu lub po prostu go usunąć. Możesz też tworzyć własne Layouty, ale to już jest temat na osobny artykuł.

W naszym programie zastosowaliśmy prosty layout o nazwie FRLayout. Obiekt tej klasy dodany został do konstruktora VisualisationViewer.

Kliknij start i patrz jak tworzy się graf. Użyj rolki w myszce, aby przybliżać i oddalać widok.

Jeżeli nie widzisz tego apletu to musisz włączyć obsługę Javy w swojej przeglądarce.

Kod powyższego apletu można ściągnąć tutaj.

Aby mieć lepsze pojęcie na temat tworzenia grafów w JUNG-u, zachęcam do pobawienia się chwilę funkcją getGraph(). Pododawaj kilka dodatkowych węzłów i obserwuj jak graf rozrasta się na Twoich oczach.

4.666665
Twoja ocena: Brak Ocena: 4.7 (3 ocen)

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com