Associazioni chiave contro gli ascoltatori chiave in Java

Prendo atto che in Java / Swing sembrano esserci almeno due modi diversi di gestire gli eventi chiave:

  • Legami chiave
  • Ascoltatori chiave

Quali sono i vantaggi / svantaggi di ciascuno e quando si preferisce uno piuttosto che l’altro?

quando dovresti preferire uno piuttosto che l’altro?

Preferisci binding di tasti da quando sono stati introdotti. Un KeyListener è una connessione di livello inferiore con eventi.

Quella pagina per le associazioni dei tasti copre molti dei motivi per cui KeyListener ad usarli piuttosto che un KeyListener . Elenca molte cose che sono semplicemente ‘non disponibili’ per un KeyListener . EG scelte di:

  • WHEN_FOCUSED
  • WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
  • WHEN_IN_FOCUSED_WINDOW

Più leggo il documento collegato, meno riesco a comprendere la necessità di porre la domanda. PER ESEMPIO:

Un’alternativa ai legami chiave sta usando i key listers. Gli ascoltatori chiave hanno il loro posto come un’interfaccia di basso livello per l’input da tastiera, ma per rispondere alle singole chiavi i collegamenti dei tasti sono più appropriati e tendono a produrre codice più semplice da gestire. Gli ascoltatori chiave sono anche difficili se il legame chiave deve essere attivo quando il componente non ha il focus. Alcuni dei vantaggi delle associazioni di tasti sono in qualche modo autodocumentanti, tengono conto della gerarchia di contenimento, incoraggiano blocchi di codice riutilizzabili (oggetti Action ) e consentono di rimuovere, personalizzare o condividere facilmente le azioni. Inoltre, rendono facile cambiare la chiave a cui è vincasting un’azione. Un altro vantaggio di Actions è che hanno uno stato abilitato che fornisce un modo semplice per disabilitare l’azione senza dover tenere traccia del componente a cui è collegato.

Componenti di testo

Come notato da @Robin, i componenti di testo hanno anche DocumentListener e DocumentFilter che possono essere aggiunti per funzionalità più adatte ai documenti di testo. Vedi Funzionalità componenti del testo per ulteriori informazioni su listener e filtri di documenti.

  1. KeyBindings (alta astrazione)

vantaggi

  • impostabile, condivisibile,

  • designato per scorciatoie semplici, senza effetti collaterali indesiderati (la maggior parte di questi eventi è abbastanza semplice e impostabile)

  • risolvere comodamente qualsiasi problema con focus in finestra (impostabile anche, sicuro che in Java la finestra deve essere focalizzata sullo schermo)

  • Swing internamente per utilizzare KeyBindings, built_in scorciatoie, azioni, altro in Key Bindings di @camickr (in Swing sono implementati scorciatoie e azioni interessanti)

  • l’output dovrebbe essere in Swing Action (la stessa alta astrazione ansible in Swing)

svantaggi

  • imansible eseguire l’override di tutti i tasti dalle tastiere

  • non è ansible sovrascrivere tre o più tasti vengono premuti nello stesso tempo

  • il codice sembra molto complicato (non vero affatto, il codice è sorter nella maggior parte dei casi in confronto con lo stesso codice di KeyListener)

  • rimosso per maggiori dettagli per vedere commnent da @camickr (richiesto Swing Timer per azioni ripetute)

  • non è ansible consumare () con un metodo implementato in API

.

KeyListeners (listener di basso livello)


vantaggi

  • molto facile da usare, intuitivo

  • il codice è molto breve per due eventi chiave

  • non è richiesta alcuna conoscenza su Swing, Java

  • è ansible sovrascrivere l’albero o vengono premuti altri tasti (ad es.), per scorciatoie di tasti molto complicate, quindi non importa quale sia in grado di sparare, eventi chiave separati

  • è ansible programmare su event.consume ()

  • è ansible ascoltare eventi interni non finalizzati da Compound JComponents (JComboBox, JSpinner …)

svantaggi

  • non accessibile per parte di contenitori e JComponents

  • (J) Il componente dovrebbe essere proprietario del focus e deve essere focalizzabile

  • non designato per Swing JComponents

.

AWTEventListener


  • per combinare tutti gli eventi Key e Mouse, listener di basso livello come è ansible in Java

  • in fondo non c’è motivo di usare questo listener per la maggior parte (anche se molto complicata) della GUI basata su Swing

  • Vedo questo ascoltatore implementato in componenti personalizzati basati su peer richiesti da AWT provenienti dal sistema operativo nativo

  • ma esistono implementazioni eccellenti per l’ inattività dell’applicazione AWTEventListener e per gli ascoltatori di eventi globali di @camickr

.

avviso: l’ordine degli eventi chiave è diverso piattaforma per piattaforma