Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [Java]Jtextfield e keylistener

    Salve,
    ho messo il seguente keylistener all'interno di una jtextfield in modo da non accettare il numero 0 in scrittura.

    codice:
    KeyListener k=new KeyListener() {
    
                public void keyTyped(KeyEvent e) {
                   // throw new UnsupportedOperationException("Not supported yet.");
                }
    
                public void keyPressed(KeyEvent e) {
                    int evt=e.getKeyCode();
                    char dd=e.getKeyChar();
                    
                   
                    if (dd==KeyEvent.VK_0) {                    
                        String testo="";                    
                        StringTokenizer arch=new StringTokenizer(Text.getText(),"0");
                        while (arch.hasMoreTokens()) testo=testo+arch.nextToken();                                        
                        Text.setText(testo);
                        
                    }
                }
    
                public void keyReleased(KeyEvent e) {
                    //throw new UnsupportedOperationException("Not supported yet.");
                }
            };        
            Text.addKeyListener(k);

    il problema è che il metodo viene richiamato ma lo zero continua a comparire ugualmente nella jtextfield , ad esempio se digito "12340" il textfield dovrebbe diventare "1234" ma rimane sempre "12340" se continuo a digitare ,ad esempio "12340560" il testo diventa "1234560"

    insomma non mi cancella mai l'ultimo zero inserito, come mai?
    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]Jtextfield e keylistener

    Originariamente inviato da JunkyFunki
    il problema è che il metodo viene richiamato ma lo zero continua a comparire ugualmente nella jtextfield
    Se intendi farlo da un KeyListener, allora dovresti "consumare" l'evento (e.consume() ) nel contesto di keyTyped.

    Altrimenti il modo più completo e generico per filtrare l'input su un JTextField è quello di creare una classe che estende PlainDocument, implementare insertString() e impostare il Document nel text field.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: [Java]Jtextfield e keylistener

    Originariamente inviato da andbin
    Se intendi farlo da un KeyListener, allora dovresti "consumare" l'evento (e.consume() ) nel contesto di keyTyped.

    Altrimenti il modo più completo e generico per filtrare l'input su un JTextField è quello di creare una classe che estende PlainDocument, implementare insertString() e impostare il Document nel text field.
    ho provato "consumando" l'evento ma la situazione resta invariata

    i plaindocument non li conosco e al momento non ho tempo per approfondirlo, magari quando m'arriva quel famoso libro
    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

    Re: Re: Re: [Java]Jtextfield e keylistener

    Originariamente inviato da JunkyFunki
    ho provato "consumando" l'evento ma la situazione resta invariata
    Ma l'hai fatto nel keyTyped?? È lì che va fatto.

    Originariamente inviato da JunkyFunki
    i plaindocument non li conosco e al momento non ho tempo per approfondirlo, magari quando m'arriva quel famoso libro
    Quale famoso libro??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    Re: Re: Re: Re: [Java]Jtextfield e keylistener

    Originariamente inviato da andbin
    Ma l'hai fatto nel keyTyped?? È lì che va fatto.

    Quale famoso libro??
    si ,all'interno del keytyped!

    come quale famoso libro? quello che m'hai consigliato la settimana scorsa
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

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

    Re: Re: Re: Re: Re: [Java]Jtextfield e keylistener

    Originariamente inviato da JunkyFunki
    si ,all'interno del keytyped!
    Così funziona, appena provato:

    codice:
    textfield.addKeyListener (new KeyListener ()
    {
        public void keyTyped(KeyEvent e)
        {
            if (e.getKeyChar () == '0')
                e.consume ();
        }
    
        public void keyPressed(KeyEvent e) { }
        public void keyReleased(KeyEvent e) { }
    });
    Originariamente inviato da JunkyFunki
    come quale famoso libro? quello che m'hai consigliato la settimana scorsa
    Java™ Programming Language, The, 4th Edition??

    Questo è quasi esclusivamente focalizzato sul linguaggio Java e solo in minima parte copre alcune delle API più importanti come I/O o le espressioni regolari. Non spiega nulla di AWT/Swing (forse un breve accenno di una o due pagine).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    ok, ora funziona anche a me! pensavo di essere sul metodo keytyped invece ero sempre su keypressed

    un altra cosa, sai mica come mai il tasto "ins" non viene ascoltato dai jtextfield?
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da JunkyFunki
    un altra cosa, sai mica come mai il tasto "ins" non viene ascoltato dai jtextfield?
    La pressione del tasto INS su un JTextField fa inviare correttamente gli eventi keyPressed/keyReleased con code VK_INSERT.
    Non keyTyped perché non è ovviamente un carattere.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Originariamente inviato da andbin
    La pressione del tasto INS su un JTextField fa inviare correttamente gli eventi keyPressed/keyReleased con code VK_INSERT.
    Non keyTyped perché non è ovviamente un carattere.
    scusa, mi sono espresso male nella domanda.

    quando su qualsiasi editor testuale premo il tasto "ins" so di poter sovrascrivere il testo già inserito

    su jtextfield la pressione del tasto "ins" non sortisce alcun effetto, ovvero non ho la possibilità di sovrascrivere il testo già inserito

    con keypressed/keyreleased posso gestire la pressione del tasto INS ma come faccio ad abilitare il jtextfield in modalità sovrascrittura?
    E' tutta colpa di Berlusconi !
    Help [Ciclico] Fisco, domande varie

    Avatar

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da JunkyFunki
    quando su qualsiasi editor testuale premo il tasto "ins" so di poter sovrascrivere il testo già inserito

    su jtextfield la pressione del tasto "ins" non sortisce alcun effetto, ovvero non ho la possibilità di sovrascrivere il testo già inserito
    Sì, vero certi editor di testo hanno questa funzionalità (il blocco note di Windows ad esempio non ce l'ha!). Ma un editor di testo è qualcosa (anzi ... molto) di più che un banale JTextField o un JTextArea.

    I componenti di testo in Swing non gestiscono questa funzionalità. Se vuoi averla, devi gestirla tu. Insomma ... è da fare. Questo presuppone: a) di mantenere da qualche parte un "stato" che indica se si è in insert o overwrite e b) in base allo stato, scambiabile con INS, inserire o sovrascrivere il testo.

    Per farlo ... beh, io personalmente non l'ho mai fatto e non saprei nemmeno bene come farlo esattamente.
    La mia idea (ma è appunto solo una idea) è quella di estendere DocumentFilter (poi lo si imposta sul Document del text field).

    remove() e replace() andrebbero passati pari pari alla superclasse con super.
    Per insertString() la cosa si divide: se si è in insert, la invocazione la si passa con super a insertString(), altrimenti la si passa a replace().

    Ma è solo una ipotesi, appena ho tempo posso fare qualche esperimento interessante.
    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.