我要解决这个问题,您有一个 JPanel
和 JLabel
,并且您必须通过拖放来克隆 JLabel
,并在放置 JLabel
的 JPanel
上创建一个 JLabel
克隆。我想问的第一件事是是否可以在匿名类(例如监听器)中实现 Cloneable
接口(interface)到 JLabel
,这样我就不必编写自己的类来扩展 JLabel
并实现 Cloneable
。我知道如何通过传输“text”属性将 JLabel
拖放到 JTextField
,但我不知道如何将 JLabel
克隆到 JPanel
。
最佳答案
在这种情况下,实现Cloneable
接口(interface)不太可能实现任何有益的效果。在 Effective Java, Second Edition ,作者在第 11 项:明智地覆盖克隆中概述了克隆对象的变幻莫测。
Drag and Drop传输数据,而不是容器。由于 String
是不可变的,因此根本没有理由克隆 String
。对于可变数据,复制构造函数或工厂方法更有意义。
由于 JLabel
不可由用户编辑,因此它可能是 DnD 的意外目标,尽管它是 possible 。或者,您可以添加 suitable component在运行时使用容器的 add()
方法,然后使用 validate()
和 repaint()
。
关于Java 拖放和可克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11699583/