2011-12-29 2 views
7

Этот вопрос возник, когда анонимный пользователь отказался от моего ответа с участием KeyListeners и предложил вместо этого использовать привязки клавиш. Этот анонимный пользователь сообщил мне, что интерфейс KeyListener был старым решением AWT и не должен использоваться.Сравнивая функциональность между KeyListeners и Key Bindings

Однако я не знаю, должен ли я полностью доверять этой информации. Я исследовал как на разных сайтах, включая оракул, так и не нашел ничего о функциональности KeyListeners или Key Bindings. Я осознаю тот факт, что эти два выполняют аналогичные задачи, но я не уверен, что именно происходит «за кулисами», так сказать.

Я как бы склоняюсь к использованию привязок клавиш в будущих проектах, просто потому, что я приобрел исследование, предполагающее, что интерфейс KeyListener требует, чтобы рассматриваемый компонент фокусировался, а Key Bindings этого не делал. Но я смущен. Почему это так? Как ключевые привязки срабатывают иначе, чем KeyListeners?

P.S. Я уверен, что это редкость, но есть ли какие-то обстоятельства, когда использование KeyListeners более уместно?

ответ

10

How to Use Key Bindings объясняет основы.

Привязки используются для сопоставления конкретных действий с конкретным ключевым действием.

KeyListener - последнее средство, когда все остальные абстракции не будут работать. Возможно, вы будете использовать KeyListener, когда будете слушать ANY KeyStroke. Поэтому было бы нецелесообразно создавать 26 привязок для всех букв алфавита.

Но снова во многих случаях лучше использовать API. Например, вместо прослушивания KeyEvents в текстовом поле вы должны использовать DocumentListener для прослушивания изменений в документе.

+0

Спасибо! Это очень помогло. Я читал ссылку раньше, но не так тщательно, как сейчас. Я забываю. Я полностью пропустил часть, объясняющую, как работают клавиши Bindings. >: O – fireshadow52

0

Я хотел бы предложить вам использовать сочетания клавиш по многим причинам:

  • Это на самом деле работает быстрее, чем KeyListener.
  • KeyBinding более развит и предлагает гораздо больше возможностей.
  • Хотя вам нужно будет использовать таймер Swing, это лучше для игр.
  • Is Устанавливается и распространяется.

Это может быть трудно использовать в сторону KeyListener, но KeyListener не сможет обрабатывать несколько нажатий клавиш в игре.