如何使用OpenCloud在Java中生成标记云?

如何使用OpenCloud在Java中生成标记云?,java,swing,api,tags,word-cloud,Java,Swing,Api,Tags,Word Cloud,我正在寻找一个库来在Java应用程序中创建标记云,我发现 我不想使用web服务器,OpenCloud需要它来获取输出,不是吗?有没有办法让OpenCloud在Java/Swing面板中工作?我想要一个独立的应用程序。如果这是不可能的,我还能在哪里找到这样的API呢?实际上OpenCloud不需要Web服务器。只需使用Swing呈现而不是HTML/JSP。下面是一个小片段,演示了使用OpenCloud库的一个非常基本的Swing标记云。它可以改进,但它提供了要点: import java.util

我正在寻找一个库来在Java应用程序中创建标记云,我发现


我不想使用web服务器,OpenCloud需要它来获取输出,不是吗?有没有办法让OpenCloud在Java/Swing面板中工作?我想要一个独立的应用程序。如果这是不可能的,我还能在哪里找到这样的API呢?

实际上OpenCloud不需要Web服务器。只需使用Swing呈现而不是HTML/JSP。下面是一个小片段,演示了使用OpenCloud库的一个非常基本的Swing标记云。它可以改进,但它提供了要点:

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

}
此代码基于的示例1

以下是我得到的结果:


我用Java创建了单词云库Kumo(日语中的云)。奇怪的是,我一直喜欢“云”这个词

Kumo可以生成BuffereImage、图像文件(PNG、BMP等),还提供了在JPanel中使用的示例。该项目是Maven化的,位于Maven Central,以使集成更容易。下面是一些单词云示例,Kumo的GitHub页面上还有更多示例:

还有一个JPanel示例和一个屏幕截图


我使用openCloud创建了简单的java单词云,使用单词频率和/或对数似然值来调整单词的权重(字体大小)。云使用随机颜色并提供简单的随机旋转

Github存储库


此Api是否支持悬停功能和链接?@user1525144当然,在鼠标单击事件发生时,您只需在每个JLabel上添加一个鼠标侦听器,您可以使用
Desktop.getDesktop().browse()
,在鼠标插入/鼠标退出时,您可以执行悬停操作。您还可以在每个JLabel上将光标设置为
cursor.getPredefinedCursor()
。非常感谢。opencloud是创建java标记云的最佳api吗?@user1525144不知道。这是我第一次用它。也许还有其他API可用,但这是我找到的唯一一个开放源码。我只是想插话说,在评估了opencloud和kumo作为我的选择之后,kumo显然是这里的赢家。我甚至不确定OpenCloud是否还被积极维护。OC的旧SourceForge页面向我的浏览器发送垃圾邮件:/