Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di tarzan76
    Registrato dal
    Nov 2007
    residenza
    Castellammare del Golfo
    Messaggi
    33

    Keylistener e Jnativehook

    Buonasera a tutti, con l'aiuto di internet ho scritto il seguente codice:

    codice:
    import org.jnativehook.GlobalScreen;
    import org.jnativehook.NativeHookException;
    import org.jnativehook.keyboard.NativeKeyEvent;
    import org.jnativehook.keyboard.NativeKeyListener;
    
    public class Main implements NativeKeyListener{ 
    
        static char b =' ';
        
        @Override
        public void nativeKeyPressed(NativeKeyEvent e) {
            char a=' ';    
            a=(char) e.getKeyCode();
            System.out.println("press "+a);
        b=a;    
        }
    
        @Override
        public void nativeKeyReleased(NativeKeyEvent e) {
    
        }
    
        @Override
        public void nativeKeyTyped(NativeKeyEvent e) {
        } 
    
    
        public static void main(String[] args)  {
            
            try{
    
                GlobalScreen.registerNativeHook();
    
            } catch (NativeHookException e){
                e.printStackTrace();
    
            }
            
            GlobalScreen.getInstance().addNativeKeyListener(new Main());    
            // aspetto i caratteri digitati da elaborare
        }
    }
    Il mio problema è che vorrei ricevere nel metodo main i caratteri digitati per poterli elaborare ma l'unico modo è stato
    codice:
      System.out.println("press "+a);
    che si trova dentro
    codice:
    public void nativeKeyPressed(NativeKeyEvent e) {
    non vorrei scrivere tutto il programma dentro questo metodo nativeKeyPressed
    ringrazio chiunque mi risponda

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da tarzan76 Visualizza il messaggio
    non vorrei scrivere tutto il programma dentro questo metodo nativeKeyPressed
    Non conosco quella API org.jnativehook (vado poi a documentarmi, per curiosità mia ...) ma il problema non è su questo ma è più di "design".

    Sicuramente non dovresti mettere decine e decine di righe di codice dentro nativeKeyPressed e simili. Questo vale in generale, per tutti i "listener", per mantenere pulito e leggibile il codice.
    Il punto semmai è come devi elaborare questi eventi! E per dirlo meglio: devi riconoscere certi eventi singoli e per ciascuno fare "qualcosa"? Devi riconoscere certe sequenze di eventi e per ciascuna fare "qualcosa"? Devi memorizzare o visualizzare tutti gli eventi da qualche parte?
    Se non precisi cosa e come vuoi fare con questi eventi .... possiamo stare qui fino alla fine della settimana.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di tarzan76
    Registrato dal
    Nov 2007
    residenza
    Castellammare del Golfo
    Messaggi
    33

    Keylistener e Jnativehook

    Ciao andbin, intanto ti ringrazio per avermi risposto così ho capito dove manca la mia chiarezza ,
    vorrei aggiungere tutti i caratteri digitati ad una stringa con
    codice:
    stringBuilder.append(e);
    e poi eleboro questa stringa tramite altri metodi che tolgono i caratteri ripetuti.
    Ho iniziato con il normale Keylistener che però vuole il focus sulla una finestra,
    per questo motivo ho cercato su internet Jnativehook che intercetta la tastiera in qualsiasi finestra mi trovo. Puoi aiutarmi a capire, magari con un frammento di codice, come ricevere questi tasti e continuare tranquillamente all'interno del metodo main?
    Grazie

  4. #4
    Quello che vorresti fare tu è non avere il modello ad "eventi" ma avere un flusso diciamo procedurale, e la cosa non è tanto diciamo "bella" sopratutto se stai programmando con un linguaggio ad oggetti come java.
    Per quanto GlobalScreen è una classe che permette di intercettare nativamente (hook di sistema) la pressione dei tasti, ora non so se effettivamente è quello che vuoi oppure magari ti bastava leggere dallo standard input.
    Ritornando al problema il concetto è che tu non devi continuare nel main ma bensì "reagire" all'evento scatenato, per esempio
    premo il tasto "H" -> mi viene scatenato l'evento -> aggiungo "H" alla mia struttura,
    premo il tasto "E" ->
    mi viene scatenato l'evento -> stampo tutta la struttura etc...

  5. #5
    Utente di HTML.it L'avatar di tarzan76
    Registrato dal
    Nov 2007
    residenza
    Castellammare del Golfo
    Messaggi
    33
    Grazie francesco.muia per avermi risposto.
    Quello che mi serve è ricevere i caratteri digitati, aggiungerli ad una stringa, eliminare i doppioni, cercare questa stringa/campo dentro un database SQLite e se esiste questa stringa/campo vorrei ottenere la frase collegata a tale campo, il tutto in qualsiasi finestra mi trovo. Premetto che ho poca esperienza in java ma vorrei rimanere nella programmazione ad oggetti perchè devo appunto elaborare più volte la stringa ottenuta. Non esiste un modo per comunicare al metodo main il carattere digitato?
    Ho pensato di creare nel main un char che riceve i caratteri e poi li aggiunge ad una Stringbuffer, è possibile?
    Se sì mi fai un piccolo esempio di codice?
    Grazie

  6. #6
    Quello che mi serve è ricevere i caratteri digitati, aggiungerli ad una stringa, eliminare i doppioni, cercare questa stringa/campo dentro un database SQLite e se esiste questa stringa/campo vorrei ottenere la frase collegata a tale campo, il tutto in qualsiasi finestra mi trovo.
    Attenzione il global hook riceve qualsiasi input che fai, esempio apro il browser e scrivo "pinco pallo" a te verranno generati n eventi, dove n è il numero di caratteri digitati.
    Non esiste un modo per comunicare al metodo main il carattere digitato?
    Vedi risposta di prima....

    codice:
    public class Main implements NativeKeyListener{ 
    
    
        StringBuilder builder = new StringBuilder();
        
        @Override
        public void nativeKeyPressed(NativeKeyEvent e) {
            char a=' ';    
            a=(char) e.getKeyCode();
            System.out.println("press "+a);
            //GUARDIA SE PREMO la lettera e allora elaboro la mia stringa
            if('e' == a){
            	this.elaborateString(builder.toString());
            	builder = new StringBuilder();
            }else 
            {
            	builder.append(a);    
            }
        }
        
        public void elaborateString(String myString)
        {
        	//METODO CHE ESEGUE LE OPERAZIONI SULLA MIA STRINGA
        }
        
    etc....
    }

  7. #7
    Utente di HTML.it L'avatar di tarzan76
    Registrato dal
    Nov 2007
    residenza
    Castellammare del Golfo
    Messaggi
    33
    Grazie mille per il tuo aiuto.

Tag per questa discussione

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.