Как я могу дать компоненту более одного DropTargetListener? - PullRequest
0 голосов
/ 09 сентября 2009

Я только что понял (трудный путь), что у Java Component s может быть только один DropTarget. Нет пота, сказал я, я просто добавлю еще DropTargetListener к этому DropTarget - только чтобы обнаружить, что DropTarget s может иметь только один DropTargetListener!

У меня есть два DropTargetListener, которые слушают очень разные события (один обрабатывает вещи, перетаскиваемые внутри компонента, другой обрабатывает вещи снаружи компонента). Должен ли я объединить их в один гигант DropTargetListener, или есть элегантный способ разделить их?

Ответы [ 2 ]

2 голосов
/ 09 сентября 2009

DropTarget является источником одноадресной передачи, поэтому вы можете добавить к нему не более одного DropTargetListener. Я считаю, что это должен быть простой объект, который проверяет источник (внутри / снаружи) отбрасываемой вещи и вызывает один из ваших DropTargetListener s в зависимости от результата.

Edit: Если вы одержимы созданием «универсального» решения, вы можете попробовать создать событие-обертку, которое передает вызовы методов исходному событию, но перехватывает rejectDrop(), acceptDrop() (и, возможно, другие методы может вызвать проблемы), а затем передать обертку слушателям, пока кто-нибудь не примет это. Это предполагает, что слушатели распознают «хорошие» события и действуют соответственно.

2 голосов
/ 09 сентября 2009

Если вы не нашли удовлетворительного решения, вы можете использовать Composite Pattern , чтобы создать DropTargetListener, который имеет список дочерних DropTargetListener s. Каждый раз, когда вызывается один из его методов, он перебирает свой список слушателей и вызывает тот же метод. Это позволит вам передать один DropTargetListener на Component, но при этом будет вызываться несколько DropTargetListener.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...