我想创建一个简单的类似cad的java应用程序。
在它里面会有一个Jframe我想拥有自己的形状。那些形状将是圆形和线条。还会放置一些文字。最多会有几千个圈子,所以速度是个问题。此外,必须一直重绘形状(例如放大等)。除了类的“标准”属性之外的那些形状我希望它们具有用新变量声明的额外属性,例如“cityname”或“speedinthisline”。形状必须在用户操作上进行交互(点击,移动等)。
我虽然对于圈子我可以使用圆形jbuttons。我找到了一些关于如何制作这种按钮或圆形框架的例子。我还找到了一些关于如何制作可点击图形的例子。在vb.net中,OvalShape存在一个Lineshape,它们是现成的可点击形状对象。
为了便于使用,我希望每个形状类型都有单独的类,其中可以声明所有额外的变量。
关注我的努力的最佳方式是什么?去扩展按钮等组件,还是去做Graphics类的东西? 是否存在类似vb.net中存在的现成类?任何推荐?
答案 0 :(得分:3)
问题在很大程度上取决于你想如何构建程序
为简单起见,我会创建一个自定义组件,可能会从JPanel
扩展并覆盖它的paintComponent
方法。
这为您提供了一个基本的“可绘制”组件,可以使用MouseListener
轻松配置...
这意味着您不必花费大部分时间来担心如何翻译鼠标事件。
我个人的偏好是维护一个MouseListener
,它会在屏幕上显示所有元素并提供整体管理。
这种方法的问题是缩放。缩放单个父容器并提供鼠标事件的转换很困难。
Lukey为您,JLayer
可以为您提供此功能。这再次使您无需进行鼠标事件转换以及尝试始终计算容器的可视大小。
答案 1 :(得分:0)
我不是Swing的专家,但是数以千计的不断变形的圆形JButton 肯定可能不会变得快速或平滑。考虑使用更基本的图形包做一些事情。 Here's一个如何制作自定义可点击的绘制对象的示例。