Java Drag & Drop и Cloneable
У меня есть эта проблема, чтобы решить, где у вас есть JPanel
а также JLabel
и вы должны клонировать JLabel
с помощью перетаскивания и создания JLabel
клон на JPanel
где JLabel
была сброшена. Прежде всего я хотел бы спросить, возможно ли реализовать Cloneable
интерфейс к JLabel
в анонимном классе, как слушатели, поэтому мне не нужно писать свой собственный класс, который расширяет JLabel
и реализует Cloneable
, Я знаю, как перетащить JLabel
в JTextField
путем передачи свойства "текст", но я не знаю, как клонировать JLabel
в JPanel
,
1 ответ
Реализация Cloneable
Интерфейс вряд ли достигнет какого-либо положительного эффекта в этом контексте. В издании Effective Java, Second Edition, автор описывает капризы клонирования объектов в статье 11: Разумно переопределяйте клонирование.
Перетаскивание передает данные, а не контейнер. Так как String
неизменен, нет причин клонировать String
совсем. Для изменяемых данных имеет смысл использовать конструктор копирования или метод фабрики.
Так как JLabel
не редактируется пользователем, это может быть неожиданной целью для DnD, хотя это возможно. Кроме того, вы можете добавить подходящий компонент во время выполнения, используя контейнер add()
метод с последующим validate()
а также repaint()
,