如何将一个形状(如圆角矩形)转换为组件?类型在Java中将形状转换为组件?
回答
铸造被简单地改变对象的参考到一个不同的表示,而不是转换和对象到一个不同类型的对象。
给予一些由类的例子,你可以投一个形状为正方形,当且仅当该形状已经实际上是一个广场:
Shape shape = new Square();
Square square = (Square) s; // this will be okay!
这只是暴露与关联的对象的现有多余的行为它是一个正方形,不会将它转换为正方形。你不能做到这一点,例如:
Shape shape = new Square();
Circle circle = (Circle) shape; // this will throw a ClassCastException
因为形状实际上不是开始有圆圈,你将可能暴露行为(例如getPerimeter()),这将不实际意义的基础对象。
同样,在你的情况下,一个形状不是一个组件,它从不将,所以你可以不投它是一个。您无法执行强制转换来暴露与组件相关的行为(添加侦听器),因为此类行为不受Shape类支持。即使向接口添加侦听器是有意义的,Shape类也不会从接口接收事件消息,因为它尚未作为开始的组件添加到接口中。据推测,您正在将图形手动绘制到组件上,因此您应该已经了解它们不属于组件层次结构的一部分。
正如你所建议的那样,假设你已经达到了在组件内绘制形状的地方,最好的方法是手动检查相关MouseEvent的x和y坐标是否在每个形状。
如果你想从一开始把他们当作组件,你必须为每个形状创建组件,并将它们添加到使用布局管理,构建接口的其余部分一样的容器。这将涉及到如你所说的创建一个“自定义组件”,而不是作为可以使用的类或方法的名称,意味着创建你自己的组件子类,或许可以在其中使用Shape参数构造函数。 Here is an example我发现创建一个自定义按钮组件是圆的,其中一些修改应满足您的需求。
你基本上回答了自己的问题大部分在最后的评论,这希望能帮助您了解如何:)。
干杯,希望这有助于。
从您的进一步反馈,我明白你只是想创建一个自定义组件。
现在棘手的问题是:你真的想/需要一个自定义组件吗?
通常情况下,你只需要扩展形状类并实现/覆盖包括()(您需要,其他方法)和paint(),您画出你想要的方式。
然后,可以在用于放置形状的容器类(JFame,JPanel,..)中设置侦听器,并使用shape.contains(point)可以在其上处理事件。
如果你真的需要一个组件的主要优势是他们能够处理的事件,与其他组件,并与布局管理器进行交互。
你可以检查this的例子。
- 1. Java - 将数组类型转换为对象类型转换
- 2. 将形状转换为组合框或其他组件
- 3. 如何在Java中将对象类型转换为int类型?
- 4. 将反应类组件转换为反应无状态组件
- 5. 将类型转换为可转换类型的对/元组
- 6. 转换字节数组为java类型
- 7. Java:将XSD文件转换为Java类
- 8. 在R中将GIS形状文件转换为栅格?
- 9. 将值类型数组转换为引用类型数组
- 10. 如何将类型为Type的JArray转换为类型数组?
- 11. 将形状大小转换为cm
- 12. 将JSONArray转换为适当类型的Java数组
- 13. 将VB转换为C#类型转换
- 14. 将Java类转换为DLL
- 15. 将类型转换为myType
- 16. 将类型转换为python
- 17. 将类型转换为拆箱类型
- 18. 类型转换的子类在Java中
- 19. 将形状文件转换为matlab中的栅格
- 20. java/swing:将文本字符串转换为形状
- 21. 在Java中是否存在“类型安全”转换的形式?
- 22. Java类型转换
- 23. 将文本框中的文本转换为形状(组件或javascript)
- 24. 将numpy数组形状从(1,100)转换为(100,)python
- 25. 将CAD文件转换为形状文件
- 26. 在Adobe Flash Professional CS5中将文本转换为矢量形状
- 27. 如何将String []或Object []的组件转换为其他类型
- 28. 在JavaFX中设置形状路径转换为其他形状的旋转
- 29. 如何编写函数将泛型类型转换为与DSum一起使用的标记形状类型?
- 30. 在JavaScript中将数组数组转换为音频波形
我不认为这个问题有意义......或者至少我不明白。 – 2012-01-16 19:38:54
呃......你不能? – mre 2012-01-16 19:40:27
您可以在组件上绘制图形(如JPanel)... – LazyCubicleMonkey 2012-01-16 20:26:23