10

Вопрос по java, keylistener, key-bindings, key-events, swing – Связывание клавиш против ключевых слушателей в Java

Я отмечаю, что в Java / Swing, по-видимому, есть как минимум два разных способа обработки ключевых событий:

Каковы преимущества / недостатки каждого из них, и когда вы предпочитаете одно, а не другое?

2ответа

21

когда вы предпочитаете одно, а не другое?

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

Эта страница дляпривязки клавиш покрывает много причин, по которым я склонен использовать их, а неKeyListener, В нем перечислено много вещей, которые простонедоступен' кKeyListener, НАПРИМЕР. выбор:

  • WHEN_FOCUSED
  • WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
  • WHEN_IN_FOCUSED_WINDOW

Чем больше я читаю связанный документ, тем меньше я понимаю необходимость задавать вопрос. НАПРИМЕР.:

Альтернативой привязкам клавиш является использование слушателей клавиш. Слушатели клавиш имеют свое место в качестве низкоуровневого интерфейса для ввода с клавиатуры, но для реагирования на отдельные сочетания клавиш более уместны и, как правило, более легко обслуживаемый код. Ключевые слушатели также трудны, если привязка клавиш должна быть активной, когда компонент не 'не в фокусе. Некоторые из преимуществ связывания клавиш в том, что онив некоторой степени самодокументируясь, учитывайте иерархию содержимого, поощряйте многократно используемые фрагменты кода (Action объекты), и позволяют легко удалять, настраивать или публиковать действия. Кроме того, они позволяют легко изменить ключ, к которому привязано действие. Еще одно преимуществоActions в том, что они имеют включенное состояние, которое обеспечивает простой способ отключить действие, не отслеживая, к какому компоненту оно подключено.

Текстовые компоненты

Как отмечает @Robin, текстовые компоненты также имеютDocumentListener & DocumentFilter который может быть добавлен для функциональности, более подходящей для текстовых документов. УвидетьОсобенности текстового компонента для получения дополнительной информации о документеслушателей & фильтры.

12

  1. KeyBindings (высокая абстракция)

преимущества

  • устанавливаемый, разделяемый,

  • предназначен для простых ярлыков, без нежелательных побочных эффектов (большинство из этих событий довольно просты и устанавливаются)

  • быстро решает любую проблему с фокусом в окне (также настраивается, конечно, в Java окно должно иметь фокус на экране)

  • Качайте внутренне, чтобы использовать KeyBindings, встроенные сочетания клавиш, действия, больше вКлючевые привязки @camickr (в Swing реализованы интересные ярлыки действия)

  • вывод должен быть в Swing Action (такая же высокая возможная абстракция в Swing)

недостатки

  • невозможно переопределить все клавиши клавиатуры

  • невозможно отменить три или более нажатых клавиш одновременно

  • код выглядит очень сложным (совсем не так, в большинстве случаев код сортируется по сравнению с тем же кодом из KeyListener)

  • удалено для более подробной информации, чтобы увидеть comnent @camickr (необходим таймер Swing для повторных действий)

  • невозможно использовать () одним методом, реализованным в API.

KeyListeners (слушатель низкого уровня)


преимущества

  • очень прост в использовании, интуитивно понятный

  • код очень короткий для одного из двух ключевых событий

  • не требуется никаких знаний о Swing, Java

  • можно переопределить дерево или нажать несколько клавиш (например, для очень сложных сочетаний клавиш, тогдане имеет значения, какой из них может быть запущен, отдельные ключевые события

  • возможно программно к event.consume ()

  • возможно прослушивание нефинализованных внутренних событий от Compound JComponents (JComboBox, JSpinner ...)

недостатки

  • недоступен для части контейнеров и JComponents

  • (J) Компонент должен быть владельцем фокуса и должен быть фокусируемым

  • не предназначен для Swing JComponents.

AWTEventListener


  • объединить все события Key и Mouse, слушатель низкого уровня, насколько это возможно в Java

  • в основном нетПричина использования этого слушателя для большинства (даже очень сложных) графических интерфейсов, основанных на Swing

  • Я вижу, что этот слушатель реализован в пользовательских Componets, основанных на AWT.

  • но есть отличные реализации для AWTEventListenerНеактивность приложений и прослушиватели глобальных событий от @camickr.

примечание: упорядочение ключевых событий зависит от платформы


RelatedQuestions