使用Swing绘制图表:一般方法

5
假设我有一个由节点和边组成的图形,并且我想在Swing应用程序中绘制它。 我不是一个Swing程序员,但据我所知,有两种方法:
  1. 将整个图形绘制为一个组件
  2. 将每个节点和边绘制为单个组件
我见过一个应用程序采用第一种方法。要拖动绘制为圆圈的节点,该应用程序会检查最接近点击点的节点。对我来说,这似乎效率不高。 第二种方法可行吗?应该遵循哪种方法,为什么?

有一些免费的图表(可以在谷歌上搜索),并且这个论坛上也有很好的反馈(例如JFreeGraphs),非免费的则根据所有者网站提供的文档、支持和问答论坛而有所不同。 - mKorbel
为什么要重复造轮子?除了已经建议的 JGraph 之外,我最喜欢的 JUNG 框架也是一个好的选择。 - kleopatra
我正在用Javascript编写一个简单的库,我正在查看可能会“启发”我的库。 - cdarwin
2个回答

7
我们编写并维护JGraph,这样做已经10年了,但我们仍然拥有一个单一的轻量级渲染器,用于绘制所有单元格。原因是每个单元格都需要一个组件,这样会导致内存成本过高。缺点是您需要自己处理刷新和事件处理,但情况并不那么糟糕。
我们已经进行了许多次讨论,总结始终如一。

2
任何一种方法都可行,取决于要求。 GraphPanel 是单个组件的简单示例,而JGraph是一个更灵活的库,使用轻量级模式进行高效渲染。

我快速浏览了JGraph的源代码,我认为它使用了“第一种”方法,而对于“组件”,我指的是“Swing组件”,如果我没错的话,JGraph只有一个组件用于绘制包含节点和边的单元格。 - cdarwin
我理解你的观点;我已经尝试澄清措辞。享元模式也出现在JTable的渲染器和编辑器中。 - trashgod

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