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

    Aumentare velocità notifiche mouse

    Uso un listener per disegnare con il mouse su un jpanel ma quando muovo il mouse più velocemente mi arrivano troppo pochi dati.
    C'è un modo per aumentare la velocità con cui java notifica gli eventi del mouse?
    Coltiva Linux, Windows si pianta da solo!

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

    Re: Aumentare velocità notifiche mouse

    Originariamente inviato da loHacker
    C'è un modo per aumentare la velocità con cui java notifica gli eventi del mouse?
    No. Sono questioni che dipendono dalla tecnologia del mouse (anche di connessione "fisica", es. USB piuttosto che PS/2) e/o forse anche dal driver del mouse.
    In senso generale, dipende dal HW e dal S.O. .... non certo da Java.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ho trovato questo programma scritto in java con cui riesco a diesgnare senza problemi, solo che non ho trovato i sorgenti.
    Un modo di farlo c'è sicuramente la velocità con cui vengono ricevuti i dati dal mouse è sicuramente più che sufficiente, è il listener che viene notificato troppo lentamente, deve esserci un modo molto più rapido.
    Coltiva Linux, Windows si pianta da solo!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da loHacker
    è il listener che viene notificato troppo lentamente, deve esserci un modo molto più rapido.
    Bene. Dimentichiamo un momento le questioni sul mouse ... e inizia a spiegare quale/i listener stai usando, registrati su cosa e quali operazioni e in generale quale approccio di disegno usi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utilizzo MouseListener, MouseMotionListener su un jpanel, quando il mouse si sposta il metodo mouseDragged provvede a disegnare alle coordinate del mouse.
    Per disegnare utilizzo un oggetto Graphics su una BufferedImage.
    Ogni volta che disegno un punto viene fatto un repaint del jpanel, forse è quest'ultimo che rallenta il tutto?
    Coltiva Linux, Windows si pianta da solo!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da loHacker
    Utilizzo MouseListener, MouseMotionListener su un jpanel, quando il mouse si sposta il metodo mouseDragged provvede a disegnare alle coordinate del mouse.
    Ok

    Originariamente inviato da loHacker
    Per disegnare utilizzo un oggetto Graphics su una BufferedImage.
    Ogni volta che disegno un punto viene fatto un repaint del jpanel
    Quindi tu disegni prima il punto sulla immagine e poi chiedi il repaint. E successivamente viene invocato il paintComponent() e qui immagino che tu disegni la immagine sul Graphics con uno dei drawImage().
    L'approccio è corretto. Non è questo il problema. Anzi, devi per forza fare così se vuoi che il disegno fatto dall'utente sia "permanente".

    Originariamente inviato da loHacker
    forse è quest'ultimo che rallenta il tutto?
    Specialmente se la immagine è molto grande, sì potrebbe essere un problema (e comunque è "relativo" ... dipende anche dal PC).

    Usa innanzitutto uno degli altri repaint, a tua scelta (ma nel tuo caso quasi sicuramente ti è più comodo il secondo).

    repaint(Rectangle r)
    repaint(int x, int y, int width, int height)

    Il cui significato è abbastanza ovvio: la zona "sporca" da ridisegnare non è tutto il componente ma solo una certa "area".
    E quando nel paintComponent() farai la drawImage, Swing lo "sa" che la zona da ridisegnare è solo quella area e quindi prenderà dalla immagine solo quella porzione da aggiornare a video.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Grazie ora va molto meglio utilizzando l'altro repaint, ma comunque non riesco ancora a disegnare una linea continua.
    Qualche altro consiglio?
    Coltiva Linux, Windows si pianta da solo!

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da loHacker
    ma comunque non riesco ancora a disegnare una linea continua.
    Se ti aspetti che muovendo anche velocemente il mouse le notifiche arrivino (e tante) tali da indicare spostamenti di 1 sola unità .... beh, è qui che sbagli.
    E ritorniamo alla questione del mouse, della sua tecnologia, della frequenza di notifica e anche di come è configurata la velocità del puntatore nel sistema.
    Se in una frazione di secondo muovi velocemente il mouse, quasi sicuramente non puoi avere tantissime notifiche che indicano spostamenti di 1 pixel!!!

    Se vuoi che l'utente possa disegnare una linea "continua", allora è il tuo programma che deve disegnare una linea dal punto precedente al punto corrente. Stai lavorando su Windows? Prendi il famigerato "Paint" di Windows e usa lo strumento "matita". La linea la disegna sempre continua, che tu muova il mouse lentamente o velocemente.
    Non è che Paint è migliore riguardo la notifica dal mouse .... no assolutamente! La frequenza di notifica è quella, che sia Paint o un tuo programma Java. Semplicemente Paint disegna una linea da un punto a quello successivo. E se provi a disegnare velocemente un qualcosa di "tondo" vedrai benissimo ad occhio che la linea è segmentata a rette.

    Ripeto ancora una volta: non puoi/devi pretendere di ottenere notifiche di spostamenti continui dal mouse. Devi far disegnare delle linee, non c'è altro che puoi fare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Grazie mille dell'aiuto ora ho capito l'approccio da adottare.
    Coltiva Linux, Windows si pianta da solo!

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.