Java – prezentacja biblioteki JUNG

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

Kilka słów o Layout-ach

Layout jest to sposób przyporządkowania współrzędnych wierzchołkom grafu. Mowa tu oczywiście o współrzędnych dwuwymiarowych. Layout-y stosuje się przy wyświetlaniu grafów na ekranie i wiąże się je z obiektami klasy VisualisationViewer. Jak już wcześniej wspomniałem w bibliotece w JUNG istnieje wiele wbudowanych layout-ów. Lista wszystkich layoutów znajduje się w pakiecie edu.uci.ics.jung.algorithms.layout.

Wiesz już jak dodawać layout do programu. Oto sposób na zmianę layout-u w trakcie pracy aplikacji:

1
public void setGraphLayout(Layout<V,E> layout)

Powyższa funkcja usuwa poprzednio ustawiony layout i zastępuje go nowym. Oznacza to, że do zmiany layout-u wystarcza jedna linijka kodu. A teraz kilka wybranych layout-ów w akcji:

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

Kod powyższego apletu znajdziesz tutaj

Prosta interakcja

Potrafimy już ładować i wyświetlać graf na kilka sposobów, ale nie dla wszystkich ta wiedza jest wystarczająca. Przyszła pora nieco urozmaicić nasze aplikacje. JUNG dostarcza kilka przydatnych metod, które pozwalają użytkownikowi na interakcję z grafem. Nie trudno się domyśleć, że większość interakcji odbywa się za pomocą myszki i właśnie tym sposobem zajmiemy się w niniejszym rozdziale.

Od razu pojawia się problem: w przeciętnej myszce są zaledwie 2 przyciski i rolka, a użytkownik może w jednej aplikacji chcieć obrócić graf, oddalić lub przybliżyć widok, przesunąć cały graf lub pojedyncze węzły, dodać lub usunąć wybrane węzły itp. Dlatego twórcy JUNG wprowadzili koncepcję „trybów myszki”. W zależności od danego trybu można wykonywać odpowiednie akcje.

Zobaczmy jak to wygląda wewnątrz programu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void main(String[] args) throws IOException {
  Graph g = getGraph();
 
  Layout<Integer, String> layout = new CircleLayout(g);
  layout.setSize(new Dimension(300,300));
 
  VisualizationViewer<Integer,String> vv =
  new VisualizationViewer<Integer,String>(layout);
  vv.setPreferredSize(new Dimension(350,350));
  
  DefaultModalGraphMouse gm = new DefaultModalGraphMouse();
  gm.setMode(ModalGraphMouse.Mode.TRANSFORMING);
  vv.setGraphMouse(gm);
  
  JFrame frame = new JFrame("Prosta Interakcja");
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.getContentPane().add(vv);
  frame.pack();
  frame.setVisible(true);
}

Większość powyższego kodu nie powinna być Ci obca. Dodane zostały (tylko) trzy ważne linijki:

  • 11 linia: tworzymy obiekt klasy DefaultModalGraphMouse

  • 12 linia: ustawiamy tryb tego obiektu na TRANSFORMING

  • 13 linia: ostatecznie za pomocą funkcji setGraphMouse związujemy dany tryb z obiektem klasy VisualizationViewer

Dzięki tym trzem prostym krokom użytkownik może teraz:

  1. przesuwać cały graf trzymając lewy przycisk myszki

  2. obracać graf trzymając SHIFT oraz lewy przycisk myszki

  3. przekrzywić graf trzymając CTRL oraz lewy przycisk myszki

  4. przybliżać i oddalać widok przy pomocy rolki

Oprócz opcji TRANSFORMING są też: ANNOTATING, EDITING, PICKING. Zachęcam do samodzielnego przetestowania tych trybów.

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

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com