Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371

    Ascoltare sempre la pressione di un tasto

    E' possibile "catturare" la pressione di un tasto della tastiera in qualsiasi momento?
    Ho provato con un KeyListener ma non funziona in quanto richiede il focus su l'oggetto, ho quindi assegnato al CurrentKeyboardFocusManager un KeyEventDispatcher creto da me, però ogni volta esegue le istruzioni nel KeyEventDispatcher per 3 volte dato che le ripete per i 3 eventi catturabili dalla tastiera, non c'è quindi un modo per ascoltare sempre la pressione di un tasto?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    74
    Penso che puoi fare un "keyBinding"(c'é la descrizione nel javatutorial) e poi associarlo al frame principale.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371
    ho provato a fare come da te suggerito, dopo aver letto il tutorial riguardo i Key Bindings, e anche quello per le Action(si, non conoscevo neanche quelle ), ho provato a mettere in pratica il tutto ma non funziona, dato che vorrei catturare la pressione del tasto solo in un determinato pannello ho associato il keyBinding al pannello in fase di costruzione cosi:
    codice:
    getInputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("F2"), "menuPausa");
    getActionMap().put("menuPausa", showMenuPausa);
    l'action dovrebbe essere corretta, non capisco perché non vada, ho anche provato ad usare WHEN_IN_FOCUSED_WINDOW come parametro di getInputMap ma non va comunque... proprio non sente il tasto

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    74
    Non riesci a darmi un quadro generale su cosa stsi facendo?

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371
    ho un JFrame principale il quale inizialmente ha come contentPane un JPanel contenente le voci "Nuova partita" e "Carica partita"(chiamato PannelloIniziale), una volta cliccato su nuova partita cambia il contentPane del JFrame facendo cosi apparire tutto ciò che ha a che fare con il gioco vero e proprio(PannelloGioco), io vorrei che sia possibile solo da questo JPanel eseguire una serie di istruzioni alla pressione di un determinato tasto indifferentemente dal focus

    quindi ho associato il keyBindings solo a PannelloGioco, ma anche premendo il tasto F2(poi lo cambierò ma per ora utilizzo lo stesso del tutorial ufficiale) non succede nulla...

    cosi ad occhio ti sembrano corrette le istruzioni che ho scritto nel post precedente?
    sono tutte inserite direttamente nel costruttore del PannelloGioco

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    74
    Io l'ho sempre usato WHEN_IN_FOCUSED_WINDOW.
    Penso che potresti provare ad utilizzarlo richiamandolo con il dot. dove usi l'oggetto.

    "mioPannello".getInputMap(WHEN_IN_FOCUSED_WINDOW). put(KeyStroke.getKeyStroke("F2"), "menuPausa");
    "mioPannello".getActionMap().put("menuPausa", showMenuPausa);

    In altenativa prova a vedere se l'abstractAction showMenuPausa contiene qualche errore.

    Io questo metodo l'ho sempre usato per associare la pressione di un pulsante sulla tastiera a vari JButton(dato che con il keyListener si presentava il problema del focus) sempre con ottimi risultati.
    Ad esempio:

    1)creo AbstractAction e la associo ad un JButton di nome bottone

    Action azione = new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
    bottone.doClick();//simula la pressione del JButton

    2)Faccio il keyBinding
    bottone.getInputMap(WHEN_IN_FOCUSED_WINDOW).
    put(KeyStroke.getKeyStroke("F5"),"premi");

    bottone.getActionMap().put("premi",azione);

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371
    funziona perfettamente, avevo incredibilmente sbagliato associando il keyBindings al pannello sbagliato... gli scherzi del caldo...

    grazie mille, se non fosse stato per te probabilmente avrei tentato di fare il tutto in qualche maniera sicuramente molto meno elegante

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.