2012-07-28 23 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