Необходимо «расширить» как MouseAdapter, так и KeyAdapter. - PullRequest
3 голосов
/ 01 апреля 2012

Просто интересно, каков наилучший практический способ создания класса, который должен обрабатывать щелчки мыши и нажатия клавиш. Очевидно, что невозможно наследовать несколько классов в Java, поэтому в данный момент я использую интерфейсы MouseListener и KeyListener, что означает, что мне нужно иметь много пустых методов в моем классе, чтобы удовлетворить интерфейсы, когда мне нужны только keyReleased и mouseReleased.

Если бы я мог использовать MouseAdapter и KeyAdapter, я мог бы избавиться от этих методов и получить более чистый код. Поэтому любые предложения о том, как использовать эти классы, не являются более грязными, чем у меня уже есть.

Ответы [ 4 ]

6 голосов
/ 01 апреля 2012

Вы можете наследовать от одного из Adapter классов, а затем реализовать другой интерфейс.Таким образом, вам нужно выполнить только половину работы.

Я бы предложил использовать Adapter, обеспечивающий наибольшее покрытие методом, для минимизации вашей работы.

Если вы уже наследуете отчто-то еще, тогда у вас, очевидно, нет другого выбора, кроме как реализовать два интерфейса.

4 голосов
/ 01 апреля 2012

Я собираюсь выйти на конечность и сказать, что вы не должны пытаться объединить эту функциональность в один класс, что попытка сделать это, скорее всего, плохое дизайнерское решение.Если вы говорите, что это потому, что они оба будут инициировать одни и те же действия, то во всех случаях оба контрольных класса совместно используют одну и ту же модель, но в противном случае создают отдельные классы - один для обработки взаимодействия с мышью, а другой для взаимодействия с клавиатурой (и какTrashgod заявляет, 1+ для него, - используя привязки клавиш, а не KeyListener).

4 голосов
/ 01 апреля 2012

Расширить MouseAdapter и использовать Связывания клавиш вместо KeyListener или KeyAdapter.

2 голосов
/ 01 апреля 2012

Вы можете расширить один, затем использовать рефакторинг «заменить наследование путем делегирования» (в Intellij, я полагаю, у eclipse есть эквивалент), а затем расширить другой

...