建议实现绘图程序 - UML设计器

时间:2011-10-20 22:01:53

标签: java swing drawing

此程序将具有无限画布(即,只要用户滚动,它变得更大)具有平铺的背景图像,您可以拖放块并在块之间绘制箭头。显然我won't use a layout manager用于放置块和线,因为它们将被绝对定位(任何链接,可能具有捕捉功能?)。问题出现在块和线上。基本上我有两个选择:

  1. 为每个构建块使用简单布局。这是最简单,最清晰的方法,但是当你拥有数百个对象时它会很好地扩展吗?这可能并不罕见,只想象一个包含50个表和几十个关系的数据库
  2. 使用基元(矩形,位图等)绘制所有内容。这看起来太复杂了(特别是文本填充和对齐等),但如果你有大量的对象,可能会更具伸缩性。此外,不会有任何事件处理程序
  3. 请根据您的经验给我一些提示。我之前从未使用Java - 我在PHP和Android上做了一些基本的东西。这是一个简单的预览

    http://www.freeimagehosting.net/newuploads/ea5c1.jpg

    声明

    你没有被迫回答这个问题。我正在寻找之前做过类似事情的人,写作的用途我可以查看一个开源项目吗?你知道理解别人的代码有多难吗?我在这里谈论实施细节......而且,不能保证他是对的。这个项目只是为了学习,很有趣,我不想出售它或任何东西,我不需要你的授权就可以开始它。

1 个答案:

答案 0 :(得分:2)

测量和绘制文本并不是一件很痛苦的事情,因为java已经内置了这样做的类。您可能需要查看2D Text Tutorial以获取更多信息。实际上,我使用不同的图形引擎进行了一些文本绘图计算,这些图形引擎更加原始,最后它是rather easy(至少对于单线绘图,对于多行,请参见上一个链接)。

对于无限画布问题,这也是我一直希望能够做到的事情。在stackoverflow上快速搜索this这听起来不错,虽然我不确定我喜欢它。您可以做的是使用GIMP具有可以在移动时延伸的滚动区域的方式 - 捕获鼠标中键的单击以标记移动视口的初始意图。然后,拖动鼠标时(单击按钮时)将jscrollpane的视口移动初始单击和当前位置之间的偏移量。如果我们移动到画布的边界之外,那么你应该简单地放大画布。

如果您仍然害怕某些手动绘图,您实际上可以将JPanel作为画布,并使用固定布局。然后你可以覆盖它用于绘制连接器的绘制方法,同时具有用于其他交互的子组件(例如buttongs和文本区域)(并且每个组件可以覆盖它自己的paint方法,以防它想要具有自定义绘制的rect)。

在我上一次java中的绘图测试中,我做了一个绘制贝塞尔曲线的应用程序(基本上是由几个控制点组成的曲线)。这是一个带有覆盖绘画方法的JPanel,它绘制了曲线本身,以及在控制点位置放置了自定义绘画的按钮。单击控制点实际上是单击按钮,因此很容易检测到匹配的控制点(因为每个按钮都有一个与之关联的控制点)。这在效率方面是不好的(手动命中检测可能更快)但在编程方面很容易。 无论如何,这个想法可以通过为每个类矩形设置一个子JPanel来扩展 - 这将提供简单的点击检测和自定义绘制,而父级将绘制连接器。

简而言之 - 使用自定义绘图来嵌套JPanels,这样您也可以放置“画布上”小部件(并使用真实的旋转小部件,如文本标签来做一些准备好的绘图),同时还可以使用自定义绘图(通过覆盖面板的涂漆方法)。请注意,这种方法的结果是一些摆动的外观可能会干扰你的绘图,所以可能需要弄乱一点(据我记得,金属和雨云的外观都很好,它们都是跨平台的。)