Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [JAVA] KeyListener "universale"

    Salve,

    lascio in standby il mio precedente problema ,grazie ad andbin e leleft per le risposte, per porvi una nuova questione.

    vorrei fare in modo che il programma sia sempre in ascolto della tastiera in modo da poter reagire alla digitazione di alcuni tasti.

    l'unica soluzione che sono riuscito a trovare è la seguente:
    1)creare una jtextfield
    2)associargli un keylistener
    3)in base al carattere digitato il programma si comporta di conseguenza

    questa soluzione ha il difetto che per funzionare l'utente deve prima posizione il cursore sulla jtextfield e in seguito digitare il carattere

    la soluzione ideale è una sorta di keylistener da aggiungere al jframe

    purtroppo il jframe non ha il metodo addKeyListener ma i metodi addcomponentlistener e addcontainerlistener che non so utilizzare e non ho nemmeno idea se sono la soluzione al mio problema

    suggerimenti in merito?
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] KeyListener "universale"

    Originariamente inviato da JunkyFunki
    purtroppo il jframe non ha il metodo addKeyListener
    Certo che ce l'ha. Lo "eredita" dalla classe java.awt.Component!

    EDIT: però, giusto per avvertirti subito, non ti è utile. Se il focus ce l'ha un componente (es. JTextField) il JFrame non riceve l'evento di tastiera.

    Devi usare un KeyEventDispatcher da aggiungere al KeyboardFocusManager.

    codice:
    KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
    
    kfm.addKeyEventDispatcher (new KeyEventDispatcher ()
    {
        public boolean dispatchKeyEvent (KeyEvent e)
        {
            // ..... 
            return false;
        }
    });
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ho modificato il codice in questo modo :

    codice:
    KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
    
    kfm.addKeyEventDispatcher (new KeyEventDispatcher ()
    {
        public boolean dispatchKeyEvent (KeyEvent e)
        {
            char cc=e.getKeyChar();
            char dd='a';
            if (cc==dd) System.out.println("ciaooooo");
            
            return false;
        }
    });
    ogni volta che digito 'a' vengono stampati tre e non uno "ciaooooo"
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da JunkyFunki
    ogni volta che digito 'a' vengono stampati tre e non uno
    Lo so. KeyEventDispatcher viene usato per dispacciare l'evento prima che venga dispacciato ai listener registrati sul componente 'target'. Viene chiamato 3 volte appunto prima di dispacciare ognuno dei keyPressed, keyTyped, keyReleased.

    Ovviamente non sapevo cosa dovevi fare di preciso. Deduco dalla tua risposta che non ti va bene. Dovrei vedere se si può fare qualcos'altro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.