Java的UML绘图API

4
我正在寻找能够绘制UML类图并在JPanel(或任何其他适合的UI实体)中呈现它们的API,用于窗口应用程序。它必须嵌入到应用程序中,因此我不需要一些可以基于Java文件生成UML的独立工具或某些插件。我需要实际的jar文件,以便创建类图,这样我就可以在窗口应用程序中使用它们。我已经调查了几个,但是我发现所有的来源都是独立的程序,或者无法在应用程序中实现,并且需要将用户的注意力从应用程序中转移开来。我正在使用NetBeans IDE,但我也安装了Eclipse。
解决方法:
我使用了PlantUML API。我手动输入符合PlantUML输入语言语法的字符串,然后使用一个简单明了的generateImage方法填充一个字节数组,然后将其转换为图像并保存到我的桌面上。这符合我的要求,因为它使用户集中精力在我的应用程序上。或者,可以在窗口或其他地方生成缓冲图像。 PlantUML API需要导入应用程序包。以下代码在我的桌面上创建了一个图像(不要忘记更改目录路径),其中包含Person类的UML类图像:
public class PaintUML {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException, InterruptedException {
    // TODO code application logic here
    ByteArrayOutputStream bous = new ByteArrayOutputStream();
    String source = "@startuml\n";
    source += "class Person {\n";
    source += "String name\n";
    source += "int age\n";
    source += "int money\n";
    source += "String getName()\n";
    source += "void setName(String name)\n";
    source += "}\n";
    source += "@enduml\n";

    SourceStringReader reader = new SourceStringReader(source);
    // Write the first image to "png"
    String desc = reader.generateImage(bous);
    // Return a null string if no generation
    byte [] data = bous.toByteArray();

    InputStream in = new ByteArrayInputStream(data);
    BufferedImage convImg = ImageIO.read(in);

    ImageIO.write(convImg, "png", new File("C:\\Users\\Aaron\\Desktop\\image.png"));

    System.out.print(desc);
}
}
2个回答

3

1
请查看Eclipse UML2 APIEclipse Papyrus,它们应该提供您正在搜索的功能。对于在JPanels中绘制支持,您可能需要做一些额外的工作。
Eclipse UML2 API提供了UML2元模型的Java接口。Papyrus是一组组件,允许构建UML模型的图表和图形编辑器。

我对绘图支持比其他任何东西都更感兴趣。我尝试过使用SVGSalamander,但当我尝试运行示例程序时它并没有为我工作。我单独发布了一个问题,但是还没有得到任何帮助:http://stackoverflow.com/questions/14936597/producing-an-svg-diagram-on-java我更想成功地将SVGSalamander用作应用程序的一部分,而不是依赖于像Papyrus这样的IDE工具。该应用程序必须可以安装和使用,而不依赖于Eclipse / NetBeans或其他单独的应用程序。 - user1028408
拥有一个图表编辑器可能是一个相当复杂的任务。因此,我建议在现有的基础上进行构建。您不必强制构建rcp应用程序来使用这些组件。您也可以将它们嵌入到swing应用程序或其他应用程序的背景中。但您将被迫使用osgi。 - SpaceTrucker
我想无论我最终使用什么,都可以通过使用Java代码调用。我希望UML类图在Java程序的一系列其他过程的最后一步中生成。重要的是用户不需要手动执行任何操作即可获得此结果。您认为是否可能嵌入像PaintUML这样的东西与osgi? - user1028408

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接