В Java, как лучше всего выполнять перетаскивание, когда перетаскиваемый элемент является самим источником управления?Я знаю, что элемент управления тоже не что иное, как данные, но различие действительно влияет на пользовательский интерфейс.
Я создаю игру в стиле пасьянса, в которой у меня есть объекты карт класса Card, полученные из JLabel.Я хочу перетащить эту карту в другое место, перетащив ее на еще не названный элемент управления Destination.Во время перетаскивания я хочу, чтобы карта визуально двигалась с помощью мыши, а когда ее уронили, я хочу, чтобы она либо переместилась к этому целевому объекту, либо вернулась на прежнее место.
Я провел различные тесты DnD и получилЯ нашел все, что работает по правильным правилам DD для Java.
Например, если я перетаскиваю объект Карты, используя истинный DnD, я могу создать только призрачное изображение карты, а не сплошное изображение.Кроме того, курсор меняется, и я бы предпочел, чтобы этого не произошло (думаю, я смогу это исправить), а элемент управления исходным кодом остается видимым (хотя должно быть легко сделать его прозрачным во время перетаскивания)
НаС другой стороны, я могу красиво перетащить Карту, прослушивая события MouseMotionListener.mouseDragged () и вручную перемещая Карту в новое место.Это прекрасно работает, но не следует правильному DnD, потому что это не будет информировать другие элементы управления о перетаскивании.Я подумал, что мог бы либо создать свою собственную систему для уведомления других элементов управления, но это не будет использовать реальный DnD Java.Кроме того, если я смешиваю реальные вещи Java dnd с этим методом буквального перемещения Карты во время mouseDragged, то я предполагаю, что реальные вещи DnD никогда не будут работать, поскольку технически мышь никогда не будет находиться непосредственно над каким-либо другим элементом управления, кроме перетаскиваемой карты.Это направление кажется грубым взломом.
Надеюсь, это имеет смысл.У меня были проблемы с сэмплами, потому что все они кажутся очень разными, и тот, который я потратил много времени на изучение, выглядит устаревшим за пару лет до капитального ремонта DnD в версии 1.4.