设计 UML 类图工具

4
我正在用Java做一个关于UML类图工具的个人项目,遇到了一些设计/编程问题。
首先是类图框。我在考虑是否要构建自己的组件来表示它,但当它被绘制在面板上时,使用鼠标移动会很尴尬。因为Java中所有的布局管理器都不允许我自由地放置框。
或者,如果我选择将我的组件绘制成矩形框,则实现最简单,但我无法使用鼠标移动它。
有什么提示或指针可以帮助我解决这个问题吗?
6个回答

3

3
此外,还要考虑使用JGraph作为多个绘图工具的基础。

2
我在思考是否要建立自己的组件来表示它,但是当它被绘制到面板上时,使用鼠标进行移动会很尴尬。因为在Java中所有的布局管理器都不会让我随意放置框。
如果你需要绝对定位一个组件,你有两种可能性:
1.使用空布局管理器(坏的解决方案,但在某些有限的情况下可以节省一些时间)
2.实现自己的布局管理器
或者,如果我选择将我的组件绘制为一个矩形框,则实现起来最简单,但我无法使用鼠标来移动它。
没错,如果需要鼠标交互,最好使用组件而不是绘制矩形。

我正在阅读Oracle关于创建自定义布局管理器的教程,它看起来很简短。我想通过在菜单面板上点击按钮并在面板上左键单击鼠标(任何位置)来将一个新的类框放置在面板上,然后稍后可以用鼠标移动它。实现自己的布局管理器似乎更有吸引力。 - bili
@bill:阅读那个教程。如果你实现了你的布局管理器,你就可以自由地允许组件的绝对定位,并同时附加鼠标监听器到每个显示的组件上。 - Heisenbug

2
又一个图形可视化工具是JUNG框架:它带有有用的动态“布局管理器”,可以很容易地进行扩展。此外,它还具有丰富的用户(通过鼠标)默认交互,并支持可插拔扩展设计。

1

不幸的是,Java Swing没有Canvas类,这对于这个问题来说是理想的。然而,这个问题及其答案演示了如何使用JPanel实现类似Canvas的行为。您可以手动在JPanel上绘制框。

要在面板上移动框,您可以捕获JPanel上的鼠标事件并自己处理它们。


我认为他考虑绘制矩形,只是因为他认为由于布局管理器的存在,无法自由移动组件。从我的角度来看,使用类似画布的组件并不是一个好主意,因为你不能在绘制的矩形上附加鼠标监听器。 - Heisenbug
你是说Swing没有“Canvas类”吗?Canvas本身并没有任何特殊的功能。你需要自己添加所有的功能。这正是你使用JComponent或JPanel时所要做的。 - camickr
是的,0verbose 绝对是正确的。这就是我无法继续画矩形的原因。 - bili
也许你使用“Canvas类”这个术语来表示图形小部件的容器,比如Gtk Canvas,不要与java.awt.Canvas混淆。 - trashgod

0

我在这里找到了可调整大小的组件教程,正是我所需要的!该面板根本不使用任何布局管理器!现在我正在尝试对代码进行一些修改,以适应类图。

接下来要做的事情就是实现观察者模式,以便当在面板中移动时,箭头可以得到盒子的最新位置。


嗨,欢迎来到stackoverflow,很高兴你找到了你要找的答案。这是一个问答网站 - 我们通常使用评论、投票和“接受”功能来感谢好的答案,而不是提供更多答案。我编辑了你的答案,删除了你写的感谢。但你可以使用上述方法之一来感谢你发现有帮助的答案。 - Flexo
谢谢!我会熟悉一下网站的规则。 - bili

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