2012-07-28 51 views
1

,你有一个JPanelJLabel我有这个问题要解决,你必须克隆JLabel与拖放和地方JLabel滴上创建一个JPanel克隆JLabel。首先我想问的是,如果可以在匿名类如侦听器中实现Cloneable接口到JLabel,所以我不必编写自己的类来扩展JLabel并实现Cloneable。我知道如何通过转移“text”属性将JLabel拖放到JTextField,但我不知道如何克隆JLabelJPanelJava的拖放和Cloneable的

+0

'如果可以在匿名类(如侦听器)中为JLabel实现Cloeable接口,那么我不必编写自己的类来扩展JLabel并实现Cloneable'。通过做一个匿名类,你已经写了你自己的类...它只是你只是没有命名它 – SJuan76 2012-07-28 08:52:11

+0

如果可以这样做,我会:label.addSomething(new Cloneable(){...} ); – user1189571 2012-07-28 08:54:03

+0

不!没有!没有!和一千不! – SJuan76 2012-07-28 08:58:01

回答

1

实现Cloneable接口不太可能在这方面取得任何有益效果。在Effective Java, Second Edition中,作者概述了中的克隆对象的变幻莫测。第11项:明智地重写克隆

Drag and Drop传输数据,而不是容器。因为String是不可变的,所以根本没有理由复制String。对于可变数据,复制构造函数或工厂方法更有意义。

由于JLabel不是用户可编辑的,它可能是DnD的意外目标,尽管它是possible。或者,您可以在运行时使用容器的add()方法添加suitable component,然后使用validate()repaint()

+0

可编辑?这不是你的意思:-) – kleopatra 2012-07-29 07:49:53

+0

@kleopatra:我不确定。标签的文本是编程式的可变的,但用户不能在原位编辑内容。例如,'JTable'可能会使用'JLabel'进行渲染,但使用'JTextField'进行编辑。我不认为要瞄准一个标签,但我希望你的洞察力。请根据需要毫不犹豫地编辑答案。 – trashgod 2012-07-29 10:18:52

+0

我们正在谈论拖动,如果我正确理解OP(问题有点多云:-)。我认为沿着财产transferHandler的行,类似于http://stackoverflow.com/questions/9486118/java-drag-drop-imageicon-from-jlabel-on-panel-1-to-jlabel-on-panel- 2但具有文本属性而不是图标属性。如果是这样,它的文本可以拖到任何具有文本属性的组件上,而不受具有可编辑性概念的组件的影响。虽然可能是错的。 – kleopatra 2012-07-29 10:38:44