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

    [Java] Problema regex e JFormattedTextField

    vorrei inserire una regex in JFormattedTextField in modo che l'isbn sia giusto.
    ho provato a fare così:
    codice:
    private Pattern pattern = Pattern.compile("ISBN\\x20(?=.{13}$)\\d{1,5}([- ])\\d{1,7}\\1\\d{1,6}\\1(\\d|X)$");
            textIsbn = new javax.swing.JFormattedTextField(
                new RegexPatternFormatter(pattern)
            );
    .......
        private class RegexPatternFormatter extends DefaultFormatter {
    
            private Matcher matcher;
    
            public RegexPatternFormatter(Pattern regex) {
                setOverwriteMode(false);
                matcher = regex.matcher("");
            }
    
            public Object stringToValue(String string) throws ParseException {
                if (string == null) {
                    JOptionPane.showMessageDialog(panelContainer, "Missing element ISBN");
                    return null;
                }
                matcher.reset(string);
                if (!matcher.matches()) {
    //                JOptionPane.showMessageDialog(panelContainer, "Wrong ISBN");
                    throw new ParseException("does not match regex", 0);
                }
                return super.stringToValue(string);
            }
        }
    diciamo che ha un malfunzionamento generale.
    quando clicco sul bottone che dovrebbe inviare i dati a un db semplicemente il campo si svuota e nn succede nulla.
    se invece decommento quel JOptiopane mi esce un errore ad ogni carattere digitato.
    probabilmente ho fatto un pò di casino.

  2. #2

    Re: [Java] Problema regex e JFormattedTextField

    Originariamente inviato da fermat
    diciamo che ha un malfunzionamento generale.
    quando clicco sul bottone che dovrebbe inviare i dati a un db semplicemente il campo si svuota e nn succede nulla.
    se invece decommento quel JOptiopane mi esce un errore ad ogni carattere digitato.
    probabilmente ho fatto un pò di casino.
    Il JFormattedTextField funziona proprio così: hai un formatter, se la stringa che inserisci in quel textfield non è del formato specificato dal formatter, allora quel super.stringToValue ritorna una stringa vuota e il tuo textfield si svuota.

    Succede anche se l'ISBN è corretto ?
    Forse il regexp è sbagliato ... mi fai un esempio di codice ISBN per contrllare la regular expression ?

    PS: Se vuoi solamente visualizzare il messaggio d'errore e lasciare la stringa anche sbagliata, togli quel
    codice:
    return super.stringToValue(string);
    e lo sostitisci con
    codice:
    return string;
    lolide
    Java Programmer

    Informati

  3. #3
    grazie per la risposta.

    allora, questo è un esempio di isbn: 978-88-89637-41-8.

    il problema sul messaggio d'errore è che nn compare al click sul bottone come dovrebbe essere, ma ad ogni carattere digitato.
    dove potrei mettere il messaggio d'errore per evitare questo comprtamento?

  4. #4
    Originariamente inviato da fermat
    grazie per la risposta.

    allora, questo è un esempio di isbn: 978-88-89637-41-8.

    il problema sul messaggio d'errore è che nn compare al click sul bottone come dovrebbe essere, ma ad ogni carattere digitato.
    dove potrei mettere il messaggio d'errore per evitare questo comprtamento?
    Il Jformattedtext controlla se corrisponde al pattern ad ogni cambiamento del testo ovviamente.
    Se vuoi fare questo, basta un semplice jtextfield, aggiungi un ActionListener al click del JButton, e in quest'action listener controlli se il pattern regexp corrisponde al testo nella textfield (textfield.getText()) con le classi Pattern e Matcher.

    Un pattern per quel tipo di isbn può essere questo:

    codice:
    ^[0-9]{3}-[0-9]{2}-[0-9]{5}-[0-9]{2}-[0-9]{1}$
    lolide
    Java Programmer

    Informati

  5. #5
    avrei fatto una cosa del genere:
    codice:
    textIsbn.setInputVerifier(new Verifier(textIsbn.getText()));
    
        private class Verifier extends InputVerifier {
    
            private Pattern pattern;
            private Matcher matcher;
    
            public Verifier(String regex) {
                pattern = Pattern.compile("^[0-9]{3}-[0-9]{2}-[0-9]{5}-[0-9]{2}-[0-9]{1}$");
            }
    
            @Override
            public boolean verify(JComponent input) {
                JTextField tf = (JTextField) input;
                return pattern.matcher(tf.getText()).matches();
            }
        }
    devo ancora testarlo perchè ho problemi con il database.
    però che dici?
    pensi possa andare?
    grazie anche per la regex!

  6. #6
    Se devi controllare che corrisponda al tuo pattern al click del pulsante perchè non aggiungere questo controllo al click del pulsante ?
    Comunque dipende da quello che serve a te... anche così va bene, però devi gestire l'errore nell'verifier, visualizzando un messaggio.
    lolide
    Java Programmer

    Informati

  7. #7
    teoricamente nn basterebbe mettere questo nell'evento:
    codice:
    textIsbn.setInputVerifier(new Verifier(textIsbn.getText()));

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.