2012-07-14 16 views
10

Estaba buscando una biblioteca para crear nubes de etiquetas en una aplicación Java, y encontré OpenCloud.¿Cómo puedo generar una nube de etiquetas en Java con OpenCloud?

No quiero tener que usar un servidor web, lo que OpenCloud requerirá para obtener la salida, ¿no? ¿Hay alguna manera de hacer que OpenCloud funcione en un panel Java/Swing? Quiero algo para una aplicación independiente. Si esto no es posible, ¿dónde más puedo buscar tal API?

Respuesta

13

En realidad, OpenCloud no requiere un servidor web. Simplemente use Swing rendering en lugar de HTML/JSP. Aquí hay un pequeño fragmento que ilustra una nube de etiqueta Swing muy básica usando la biblioteca de OpenCloud. Se puede mejorar, pero le da la esencia:

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

} 

Este código se basa en el ejemplo 1 de la OpenCloud library

Aquí es una salida de lo que tengo:

Swing tag cloud demo image

+0

Wonderful.Thank que – coder

+0

¿Puede esta función activable soporte de la API y la vinculación? – coder

+0

@ user1525144 Claro, todo lo que necesita es agregar un MouseListener en cada JLabel al hacer clic con el mouse en los eventos, puede usar 'Desktop.getDesktop(). Browse()', al mouseEntered/mouseExited puede actuar para el allanar. También puede establecer el cursor en 'Cursor.getPredefinedCursor()' en cada JLabel. –

10

Creé la biblioteca de nube de palabras, Kumo (nube en japonés), en Java. Curiosamente, siempre me han gustado las nubes de palabras. :)

Kumo puede generar imágenes Buffered, archivos de imagen (PNG, BMP, etc.), y también tiene ejemplos que muestran el uso en JPanels. El proyecto está mavenizado y en Maven Central para facilitar la integración. A continuación se incluyen varios ejemplos nubes de palabras y hay más ejemplos en la página GitHub de Kumo: https://github.com/kennycason/kumo

También hay un ejemplo JPanel here y una captura de pantalla 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

Solo quería hablar aquí y decir que después de evaluar a OpenCloud y Kumo como mis opciones, Kumo fue el claro ganador aquí. Ni siquiera estoy seguro de si OpenCloud se mantiene activamente más. La página anterior de SourceForge para OC correo basura mi navegador. : / – drkstr1

0

He usado OpenCloud para crear nubes de palabras simples Java utilizando la frecuencia de palabras y registrar los valores de probabilidad o para ajustar el peso de las palabras (tamaño de la fuente). Las nubes usan colores aleatorios y proporcionan una rotación aleatoria simple.

Github repositorio here

English sample

Arabic sample

Cuestiones relacionadas