Limitare l'inserimento di soli non caratteri in una JTextField Java

Scripta14

Nuovo Utente
95
8
Buongiorno a tutti,

vi chiudo aiuto per gestire una JTextField. Sto cercando di impedire l'inserimento nella textfield di tutto ciò diverso da un non carattere(@ , \ - ..ecc).
Quello che vorrei fare, è impedire di stampare nella casella i caratteri diversi da quelli previsti, oppure visualizzare un messaggio e alla chiusura del messaggio avere la casella vuota.
Riesco a gestire l'evento con la visualizzazione del messaggio, ma dopo la chiusura del messaggio, il carattere digitato viene stampato nella casella.
Ho fatto alcuni tentativi per cancellare il contenuto della casella, ma dopo la chiusura del messaggio mi va in errore.
Sto provando con una JFormattedTextField, ma non riesco ad adattarla al mio codice.
Potreste darmi qualche suggerimento?
Grazie a tutti.
Riporto la porzione del codice dove gestisco l'evento con la JTextField.
Codice:
textField.getDocument().addDocumentListener(new DocumentListener(){

            @Override
            public void changedUpdate(DocumentEvent e) {
                
                
            }

            @Override
            public void insertUpdate(DocumentEvent e) {
                 String n="\\W+";
                 Pattern p=Pattern.compile(n);
                 Matcher m=p.matcher(textField.getText());

                if(!m.matches()){
                
                    JOptionPane.showMessageDialog(null, "Non hai inserito un non carattere!!!\n"
                            ,
                            "Inserimento Errato", JOptionPane.WARNING_MESSAGE);
                
                }
                
                
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                
            }
            
        });
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Prova con un DocumentFilter oppure usa un JFormattedTextField.
 

Scripta14

Nuovo Utente
95
8
Grazie per il suggerimento.
Avevo provato con il JFormattedTextField, ma non sono riuscito ad adattarlo alle mie esigenze.
Su tuo suggerimento, ho provato con il DocumentFilter, riuscendo ad ottenere quello che volevo.
Riporto il codice per quelli che si trovassero a gestire un'esigenza analoga alla mia.

Codice:
String n="\\W+";
        Pattern p=Pattern.compile(n); 
        
        textField = new JTextField();
        textField.setColumns(10);
        
      
          ((AbstractDocument) textField.getDocument()).setDocumentFilter(new DocumentFilter(){
              
              @Override
              public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
                  if((text = text.replaceAll("\\w+", "")).isEmpty()){ 

                      JOptionPane.showMessageDialog(null, "Non hai inserito un non carattere!!!\n"
                              ,
                              "Inserimento Errato", JOptionPane.WARNING_MESSAGE);
                  };
                  
                  super.replace(fb, offset, length, text, attrs);
                  
              }
              
          });
 
  • Mi piace
Reazioni: rodhellas

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!