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

    Associare frecce direzionali a KeyTyped

    Ciao,
    sto cercando di far muovere un oggetto su un jpanel. Per farlo l'ho inserito in una jlabel e creato un keylistener che lo "sposta" con il metodo setLocation().
    Il problema è che le frecce non vengono riconosciute dal metodo keyTyped, ma solo da KeyPressed e keyReleased che sono meno "reattivi" del primo.
    Dato che vorrei cercare di ottenere un movimento più fluido, qualcuno sa se è possibile associare la pressione delle frecce ad un evento keyTyped??
    Oppure se esiste qualche metodo migliore per far muovere un oggetto su un jpanel?

    Grazie mille!! Ciao!!

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

    Re: Associare frecce direzionali a KeyTyped

    Originariamente inviato da dionisoft
    sto cercando di far muovere un oggetto su un jpanel. Per farlo l'ho inserito in una jlabel e creato un keylistener che lo "sposta" con il metodo setLocation().
    Spostare un "componente" non è l'unico approccio ovviamente (e probabilmente nemmeno il migliore) ...
    L'altro approccio è disegnare tutto nel pannello. (e trovi svariati esempi di ciò tra i miei Java Examples, vedi firma).

    Originariamente inviato da dionisoft
    Il problema è che le frecce non vengono riconosciute dal metodo keyTyped
    keyTyped tratta "caratteri" cioè tasti il cui significato si può traslare in un codice unicode.
    E le frecce non hanno nulla a che fare con "caratteri".

    Originariamente inviato da dionisoft
    ma solo da KeyPressed e keyReleased che sono meno "reattivi" del primo.
    Non capisco il senso del "meno reattivo". Prima viene invocato keyPressed, se il tasto dà origine ad un "carattere" viene quindi invocato keyTyped. Tutto questo ripetuto finché il tasto è tenuto premuto. Al rilascio viene invocato keyReleased.

    Originariamente inviato da dionisoft
    Dato che vorrei cercare di ottenere un movimento più fluido, qualcuno sa se è possibile associare la pressione delle frecce ad un evento keyTyped??
    Ripeto che le frecce non potrai mai gestirle con keyTyped.

    Originariamente inviato da dionisoft
    Oppure se esiste qualche metodo migliore per far muovere un oggetto su un jpanel?
    Ripeto: disegnare gli oggetti sul pannello.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ciao Andbin!
    Ti ringrazio per la risposta!! Avevo già letto la documentazione e per questo chiedevo se c'era un qualche metodo che permettesse di utilizzare il metodo keyTyped che reputavo (erroneamente a quanto pare) più "reattivo" del keyPressed.
    Avevo già visto anche alcuni dei tuoi esempi, come ArrowMove, però sia lì che nel mio programma il movimento non è immediato rispetto a quando si preme il tasto. C'è sempre qualche attimo di attesa, e questo vorrei evitarlo.
    Secondo te disegnare tutto sul pannello renderà i movimenti dell'immagine più immediati rispetto alla pressione dei tasti?
    Ancora grazie!!!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dionisoft
    però sia lì che nel mio programma il movimento non è immediato rispetto a quando si preme il tasto. C'è sempre qualche attimo di attesa
    Questo purtroppo sì, perché dipende da come il sistema configura la tastiera. Mi riferisco al tempo di "delay" prima della ripetizione e la "velocità" di ripetizione. Parametri che puoi certamente impostare tramite un apposito tool di sistema (su Windows è nel pannello di controllo) ma che non puoi cambiare da Java e che comunque non puoi farci affidamento più di tanto.

    Quello che si potrebbe fare (complicando un pochino la gestione) è determinare solo quando il tasto viene premuto la prima volta e poi rilasciato alla fine. Appena determini che il tasto è stato premuto per la prima volta, fai partire un timer con la temporizzazione che preferisci per gestire la ripetizione. Quindi ovviamente puoi evitare delay e avere il tempo che vuoi.
    Non è facile ma tecnicamente si può fare.

    Originariamente inviato da dionisoft
    Secondo te disegnare tutto sul pannello renderà i movimenti della jlabel più immediati rispetto alla pressione dei tasti?
    Disegnare su un pannello tutti gli elementi ti permette di non avere tanti veri "componenti" in giro e oltretutto ti permette di realizzare disegni "sofisticati" con l'uso delle API di Java 2D.
    Ma questo però non centra tanto con i tasti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Vorrà dire che farò un pò di prove!!!
    Quel che è certo è che proverò a seguire il tuo consiglio!!
    Ancora grazie, ciao!!

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.