Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102

    [Java] Controllo tipi su casella di testo

    Salve, ho cercato sulla documentazione ma non ho trovato nulla a riguardo... Vorrei fare un controllo realtime sui valori che inserisco nella casella di testo. Mi spiego meglio:

    se aprite la calcolatrice di windows (o di linux e mac) quando noi tentiamo di inserire lettere nella casella il programma non ce lo permette, non permettendo l'inserimento dati... quindi possiamo solo digitare i numeri! Esiste un metodo in Java da permettermi tale cosa, quindi se un utente digitasse nella casella di testo lettere esse non verranno inserite? Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Devi creare un Document che faccia ciò che vuoi e poi assegnarlo alla JTextField.

    Un esempio di Document che accetta solo cifre (e non lettere o altro):

    codice:
    class CifreDocument extends PlainDocument {
       public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
          if (str != null) {
             StringBuffer sb = new StringBuffer( str.length() );
    
             for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);   // Ottengo ciascun carattere della stringa
                if (Character.isDigit(c)) {   // Se il carattere è una cifra, la inserisco
                   sb.append(c);
                }
             }
             super.insertString(offs, sb.toString(), a);
          }
       }
    }
    Che andrà assegnato alla tua JTextField:

    codice:
    JTextField txt = new JTextField();
    txt.setDocument( new CifreDocument() );
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102
    Grazie , però al momento sto studiando AWT, non SWING... su AWT è analoga la discussione? Perché non ho la minima idea di cosa sia un Document, quindi forse ci arriverò con Swing...

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da valerio65
    Grazie , però al momento sto studiando AWT, non SWING... su AWT è analoga la discussione? Perché non ho la minima idea di cosa sia un Document, quindi forse ci arriverò con Swing...
    Probabilmente ci sarà un modo migliore, comunque potresti associare un TextListener alla TextArea, intercettare i vari cambiamenti del testo ed agire di conseguenza sul testo contenuto.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102
    Originariamente inviato da Kaamos
    Probabilmente ci sarà un modo migliore, comunque potresti associare un TextListener alla TextArea, intercettare i vari cambiamenti del testo ed agire di conseguenza sul testo contenuto.
    Col TextListener, intercetto i valori non numerici e faccio un set a "0" o a "" dell'area, ma si vede però anche se per un decimo di secondo il cambiamento, come quando si bugga il mouse e inizia a lampeggiare velocissimo... diciamo che sta un po' male ad un applicazione performante, meglio non permetterne direttamente l'inserimento!

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Aggiungi un KeyListener alla TextField. Il KeyListener dovrebbe implementare solo il metodo keyTyped() lasciando vuoti gli altri due metodi:

    codice:
       public void keyPressed(KeyEvent ke) { }
    
       public void keyReleased(KeyEvent ke) { }
    
       public void keyTyped(KeyEvent ke) {
          char c = ke.getKeyChar();
          if ( !Character.isDigit(c) ) ke.consume();
       }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da LeleFT
    Aggiungi un KeyListener alla TextField. Il KeyListener dovrebbe implementare solo il metodo keyTyped() lasciando vuoti gli altri due metodi:

    codice:
       public void keyPressed(KeyEvent ke) { }
    
       public void keyReleased(KeyEvent ke) { }
    
       public void keyTyped(KeyEvent ke) {
          char c = ke.getKeyChar();
          if ( !Character.isDigit(c) ) ke.consume();
       }
    Ciao.
    in questo caso, se non ci sono problemi di estensione classi (ereditarietà insomma) puoi estendere keyadapter e avere un comportamento di default degli altri metodi (soluzione leggermente più pulita). Di fatto però estendi una classe che ha già delle implementazione, ti giochi la possibilità di inserire la tua classe in una tua gerarchia.
    Valuta le due soluzioni
    RTFM Read That F*** Manual!!!

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102
    Originariamente inviato da LeleFT
    Aggiungi un KeyListener alla TextField. Il KeyListener dovrebbe implementare solo il metodo keyTyped() lasciando vuoti gli altri due metodi:

    codice:
       public void keyPressed(KeyEvent ke) { }
    
       public void keyReleased(KeyEvent ke) { }
    
       public void keyTyped(KeyEvent ke) {
          char c = ke.getKeyChar();
          if ( !Character.isDigit(c) ) ke.consume();
       }
    Ciao.
    Originariamente inviato da valia
    in questo caso, se non ci sono problemi di estensione classi (ereditarietà insomma) puoi estendere keyadapter e avere un comportamento di default degli altri metodi (soluzione leggermente più pulita). Di fatto però estendi una classe che ha già delle implementazione, ti giochi la possibilità di inserire la tua classe in una tua gerarchia.
    Valuta le due soluzioni
    Grazie mille a tutti e due, soluzioni funzionanti perfettamente!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Cosciente del fatto che TextListener fosse una soluzione "a danno già fatto" l'avevo comunque suggerito per semplicità perché almeno funziona sempre, mentre ad esempio se si utilizza KeyListener bisogna occuparsi anche dell'input da mouse (copia e incolla) che non viene ovviamente intercettato dal KeyListener.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    102
    Originariamente inviato da Kaamos
    Cosciente del fatto che TextListener fosse una soluzione "a danno già fatto" l'avevo comunque suggerito per semplicità perché almeno funziona sempre, mentre ad esempio se si utilizza KeyListener bisogna occuparsi anche dell'input da mouse (copia e incolla) che non viene ovviamente intercettato dal KeyListener.
    Ho notato che comunque KeyListener non gestisce gli eventi con i bottoni! Avevo intenzione di far muovere la scelta tramite le freccette direzionali (quando ti spunta il quadratino tratteggiato attorno al bottone) però non ha intenzione di muoversi! L'unico evento che il bottone accetta è il click sinistro del mouse! ActionListener poi ha soltanto un metodo che gestisce appunto l'evento del mouse, quindi come potrei fare??

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.