Как я могу дать компоненту более одного DropTargetListener?
-
05-07-2019 - |
Вопрос
Я только что (сложным образом) узнал, что в Java Component
может быть только один DropTarget
. Не беспокойтесь, я сказал, я просто добавлю еще один DropTargetListener
к этому DropTarget
- только чтобы обнаружить, что у DropTarget
может быть только один < код> DropTargetListener код>
У меня есть два DropTargetListener
, которые слушают очень разные события (один обрабатывает вещи, перетаскиваемые в компоненте, другой обрабатывает вещи снаружи компонента). Должен ли я объединить их в один гигантский DropTargetListener
или есть элегантный способ разделить их?
Решение
DropTarget
является источником одноадресной рассылки, поэтому вы можете добавить в него не более одного DropTargetListener
. Я считаю, что это должен быть простой объект, который проверяет источник (внутри / снаружи) отбрасываемой вещи и вызывает один из ваших DropTargetListener
в зависимости от результата. Р>
Изменить. Если вы одержимы идеей создания " универсального " В этом случае вы можете попытаться создать событие-обертку, которое передает вызовы методов исходному событию, но перехватывает rejectDrop ()
, acceptDrop ()
(и, возможно, другие методы, которые могут вызвать проблемы), затем передайте обертку слушателям, пока не примете ее. Это предполагает, что слушатели распознают «хорошо» события и действовать соответственно.
Другие советы
Если вы не найдете удовлетворительного решения, вы можете использовать составной шаблон , чтобы создайте DropTargetListener
со списком дочерних DropTargetListener
. Каждый раз, когда вызывается один из его методов, он перебирает свой список слушателей и вызывает тот же метод. Это позволит вам передать один DropTargetListener
Component
, но при этом будет вызываться несколько DropTargetListener
.