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

Pubblicità

Scripta14

Nuovo Utente
Messaggi
95
Reazioni
8
Punteggio
25
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) {
                
            }
            
        });
 
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);
                  
              }
              
          });
 
Pubblicità
Pubblicità
Indietro
Top