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

    Controllo jTextField

    io ho una jtextfield, ho messo un controllo su questa textfield ke in pratica dice:
    se il contenuto della textfield contiene solo numeri allora abilita il pulsante jbutton.
    Funziona tutto correttamente, solo ke c'è una pecca, cioè, x avviare il controllo devo scrivere il numero sulla textfield e poi premere invio in modo che cosi si abilita il pulsante. Cioè se io in textfield scrivo un numero, se nn premo invio non mi abilita il jbutton... devo premere invio x avviare il controllo. Volevo sapere se c'era un modo x far si che il controllo venga fatto su ogni carattere scritto o kmq sia evitando di premere qualche pulsante.
    Vi ringrazio e aspetto una risposta...

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

    Re: Controllo jTextField

    Originariamente inviato da Nongiovine88
    Volevo sapere se c'era un modo x far si che il controllo venga fatto su ogni carattere scritto o kmq sia evitando di premere qualche pulsante.
    Certo, ci sono diverse soluzioni:

    a) Implementare un DocumentListener che registri sul Document del JTextField. Il DocumentListener riceve eventi che indicano quando "qualcosa" nel document è stato cambiato/inserito/rimosso. Dall'evento puoi sapere in modo più preciso quale parte del documento è stata modificata. Ma se vuoi puoi anche trattare il testo nella sua interezza. Ovvero potrebbe anche non interessarti cosa esattamente è stato modificato e fare un controllo su tutto il testo intero (per esempio con una "espressione regolare").

    b) Implementare un apposito document (estendendo PlainDocument e facendo l'override di insertString()). Con tale soluzione potresti addirittura "filtrare" via i caratteri che non vuoi accettare! Ma questo sarebbe di più di quello che stai chiedendo.
    Ma senza fare "filtri" potresti comunque intercettare cosa viene inserito e quindi agire di conseguenza.

    c) Usare un DocumentFilter (estendi questa classe) e setti il filtro con setDocumentFilter() di AbstractDocument (nota: tutti i documenti "reali" predefiniti nel framework estendono AbstractDocument). Questa strada è un pochino più complessa (per via della logica del filtro, vedi javadoc).

    d) Usare un InputVerifier (estendi questa classe) che imposti con setInputVerifier() del JTextField (tecnicamente è di JComponent .... vale per qualunque componente).
    Un InputVerifier ha un metodo verify() che ritorna un boolean. Quando il "focus" sta per lasciare il tuo JTextField, il verify() viene invocato. Se tu ritorni true, il focus può passare ad un altro componente (es. cliccando su un pulsante esso può ricevere il focus), altrimenti se false il focus resta sul JTextField e basta. In pratica puoi "blindare" il componente e non far uscire il focus fino a quando il contenuto non è quello che ti aspetti/accetti.
    Non è esattamente quello che hai chiesto ma potrebbe essere un'altra alternativa.


    Non tentare di usare banalmente un KeyListener, funziona per i tasti digitati "fisicamente" ma è totalmente bypassato nel caso di un "paste" (incolla) sul campo di testo.
    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.