Пользовательское перетаскивание Java в JPanel
Пользовательское перетаскивание Java - нет обратных вызовов TransferHandler.
Я хочу реализовать пользовательские функции перетаскивания для JPanel производный класс. Я следую рекомендациям стандартного учебника DnD:
перетаскивание и передача данных
на первый взгляд, вещи кажутся довольно strightforward, но когда я на самом деле попробуйте, я не получаю никаких признаков того, что происходит какое-либо поведение DnD. В на самом деле, ни один из методов в моем TransferHandler называемый.
Итак, давайте рассмотрим, что я сделал...
Я сделал свой собственный класс контейнера, который объявляет о расширении JPanel:
public class DnDUnitPanel extends JPanel
{
...
}
Я скопировал ListTransferHandler из этой демонстрации:
переименовал класс Как DndUnitTransferHandler, обрезал код, который ссылка на объекты JList и установленную систему.из.метод println() заявления на каждом из 5 методов там.
затем я создаю два экземпляра различные экземпляры DnDUnitPanel, как это:
DnDUnitPanel topPanel = new DnDUnitPanel(new GridLayout(0, 4, 6, 6), true);
// topPanel.setDragEnabled(true);
topPanel.setName("Top Panel");
topPanel.setTransferHandler(new DnDUnitTransferHandler());
DnDUnitPanel bottomPanel = new DnDUnitPanel(new GridLayout(0, 4, 6, 6), true);
// bottomPanel.setDragEnabled(true);
bottomPanel.setName("Bottom Panel");
bottomPanel.setTransferHandler(new DnDUnitTransferHandler());
(и я также создаю некоторые экземпляры JLabel и добавляю() их в панели (не показанный.))
когда я пытаюсь перетащить JLabel с одной панели на другую, ничего не происходит. Поэтому я вернулся и перечитал эту страницу:--4-->
в частности, что он говорит о setDragEnabled ():
turns on drag support. (The default is false.) This method is
defined on each component that supports the drag gesture; the link
takes you to the documentation for JList.
JPanel не имеет метода setDragEnabled (). Поэтому я спросил себя:, что? это означает: "компонент, который поддерживает перетаскивание"?
Я сначала подумал, что это должно означать то, что заявлено к реализации MouseListener and / or MouseMotionListener. Я изменил DnDUnitPanel на заявить, что он реализует, как и все методы. Имеющий сделав это, я увидел, что mousePressed (), mouseClicked(), mouseDragged () и т. д. были вызваны, но все еще ничего в TransferHandler был вызван, и все еще нет курсора перетаскивания указывающий что-то тащили или вот-вот бросят.
затем я посмотрел на источник для самого JList и решил, что "поддерживает жест перетаскивания" на самом деле просто означает то, что имеет свойство 'dragEnabled' со связанными геттером и сеттером.
Итак, я объявил свойство и предоставил геттер и сеттер на DnDUnitPanel, просто скопировав код прямо из самого JList (мышление возможно, что-то, чего я не совсем понимаю, зовет меня. isDragEnabled () и поиск истинного значения для инициирования поведения DnD.)
к сожалению, предоставление этих (и комментарий выше вызовы DnDUnitPanel.setDragEnabled ()) также не имел никакого эффекта.
Так... TransferHandler никогда не вызывается(). Очевидно, что важное здесь отсутствует, но я не вижу, что это может быть.
Я в тупике, что предпринять.
кто-нибудь видит, чего здесь не хватает?
1 ответов
в основном вам нужен источник данных.
посмотреть другие Stackoverflow вопрос, здесь и здесь (хорошее объяснение DnD)