2012-07-14 7 views
10

Ich suchte nach einer Bibliothek zum Erstellen von Tag Clouds in einer Java-Anwendung, und ich fand OpenCloud.Wie kann ich eine Tag Cloud in Java generieren, mit OpenCloud?

Ich möchte nicht einen Webserver verwenden müssen, den OpenCloud benötigt, um die Ausgabe zu erhalten, nicht wahr? Gibt es eine Möglichkeit, OpenCloud in einem Java/Swing-Panel zu verwenden? Ich möchte etwas für eine eigenständige Anwendung. Wenn dies nicht möglich ist, wo kann ich dann nach einer solchen API suchen?

Antwort

13

Eigentlich benötigt OpenCloud keinen Webserver. Verwenden Sie einfach Swing-Rendering anstelle von HTML/JSP. Hier ist ein kleiner Ausschnitt, der eine sehr einfache Swing-Tag-Cloud mit der OpenCloud-Bibliothek illustriert. Es kann verbessert werden, aber es gibt Ihnen das Wesentliche:

import java.util.Random; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

import org.mcavallo.opencloud.Cloud; 
import org.mcavallo.opencloud.Tag; 

public class TestOpenCloud { 

    private static final String[] WORDS = { "art", "australia", "baby", "beach", "birthday", "blue", "bw", "california", "canada", "canon", 
      "cat", "chicago", "china", "christmas", "city", "dog", "england", "europe", "family", "festival", "flower", "flowers", "food", 
      "france", "friends", "fun", "germany", "holiday", "india", "italy", "japan", "london", "me", "mexico", "music", "nature", 
      "new", "newyork", "night", "nikon", "nyc", "paris", "park", "party", "people", "portrait", "sanfrancisco", "sky", "snow", 
      "spain", "summer", "sunset", "taiwan", "tokyo", "travel", "trip", "uk", "usa", "vacation", "water", "wedding" }; 

    protected void initUI() { 
     JFrame frame = new JFrame(TestOpenCloud.class.getSimpleName()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     Cloud cloud = new Cloud(); 
     Random random = new Random(); 
     for (String s : WORDS) { 
      for (int i = random.nextInt(50); i > 0; i--) { 
       cloud.addTag(s); 
      } 
     } 
     for (Tag tag : cloud.tags()) { 
      final JLabel label = new JLabel(tag.getName()); 
      label.setOpaque(false); 
      label.setFont(label.getFont().deriveFont((float) tag.getWeight() * 10)); 
      panel.add(label); 
     } 
     frame.add(panel); 
     frame.setSize(800, 600); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new TestOpenCloud().initUI(); 
      } 
     }); 
    } 

} 

Dieser Code basiert auf dem Beispiel 1 der OpenCloud library

Hier ist ein Ausgang von dem, was ich habe:

Swing tag cloud demo image

+0

Wonderful.Thank Sie – coder

+0

Kann diese Api Unterstützung Hover-Funktion und Vernetzung? – coder

+0

@ user1525144 Sicher, alles, was Sie brauchen, ist ein MouseListener auf jedem JLabel nach Mausklick Ereignissen hinzuzufügen, können Sie 'Desktop.getDesktop(). Browse()' verwenden, auf MausEntered/mouseExited können Sie für das Schweben handeln. Sie können den Cursor auch in jedem JLabel auf 'Cursor.getPredefinedCursor()' setzen. –

10

Ich habe die Wort-Cloud-Bibliothek, Kumo (Cloud in Japanisch), in Java erstellt. Seltsamerweise habe ich Wortwolken immer gemocht. :)

Kumo kann BufferedImages, Bilddateien (PNG, BMP, usw.) erzeugen und hat auch Beispiele, die die Verwendung in JPanels zeigen. Das Projekt wird mavenisiert und in Maven Central zur Erleichterung der Integration. Unten finden Sie einige Beispielwortwolken und es gibt weitere Beispiele auf Kumos GitHub-Seite: https://github.com/kennycason/kumo

Es gibt auch ein JPanel-Beispiel here und einen Screenshot here.

enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

+1

Ich wollte nur hier reinhören und sagen, dass Kumo, nachdem ich opencloud und kumo als meine Optionen evaluiert hatte, der klare Gewinner war. Ich bin mir nicht einmal sicher, ob OpenCloud noch aktiv gepflegt wird. Die alte SourceForge-Seite für OC spammte meinen Browser. : / – drkstr1

0

I Opencloud verwendet habe, einfach Wolken java Wortfrequenz mit Wort zu schaffen und oder Wahrscheinlichkeitswerte einzuloggen, um die Worte Gewicht (Schriftgröße) einzustellen. Die Wolken verwenden zufällige Farben und bieten eine einfache zufällige Rotation.

Github-Repository here

English sample

Arabic sample