Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442

    Testare se un JTextField numerico è vuoto

    Come posso fare per testare se l'utente non ha inserito nulla in un jtextfield dove andrebbe inserito un numero?
    Ho provato con isEmpty() ma mi dice "Float cannot be dereferenced", mentre se il campo è una stringa isEmpty() funziona.

    Questa è l'istruzione che da l'errore:

    newProduct.setProductPrice(Float.parseFloat(produc tPrice.getText()));

    Ho provato anche a catturare l'eccezione ma mi viene mostrato lo stesso il messaggio d'errore, e comunque preferirei non arrivare proprio a lanciare l'eccezione.

    Grazie!!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Come posso fare per testare se l'utente non ha inserito nulla in un jtextfield

    productPrice.getText()
    Questo dà un String ..... testa il length(), no?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Questo dà un String ..... testa il length(), no?
    Però questo controllo lo vorrei inserire "a monte" cioè nel metodo che inserisce il valore nel database, e lì come dici tu non lo posso fare perché devo passargli già la stringa parsata a float.
    Ci sono altre strade?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Però questo controllo lo vorrei inserire "a monte" cioè nel metodo che inserisce il valore nel database, e lì come dici tu non lo posso fare perché devo passargli già la stringa parsata a float.
    Ci sono altre strade?
    Tu hai chiesto come testare se un JTextField è vuoto .... getText() ritorna un String, String ha length(), che vale 0 se vuoto. Stop.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    isEmpty() è un metodo di String che non avrebbe senso su un float...

    Ti serve una cosa del genere:

    codice:
            String text = productPrice.getText();
            if (text.isEmpty()) {
                System.out.println("Non hai inserito nulla!");
            } else {
                try {
                    float price = Float.parseFloat(text);
                    newProduct.setProductPrice(price);
                } catch (NumberFormatException ex) {
                    System.err.println("Numero non valido!");
                }
            }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ok c'è un altro stranissimo problema però!
    Con questo codice:
    codice:
    if (productPrice.getText().length()==0) {
                   JOptionPane.showMessageDialog(null, "Non puoi inserire un prodotto senza il prezzo!", "",JOptionPane.WARNING_MESSAGE);
                 } else
                    newProduct.setProductPrice(Float.parseFloat(productPrice.getText()));
                 int result = DBConnection.insertProduct(newProduct);
    Mi mostra il warning ma inserisce il prodotto nel database senza il prezzo! E senza dare l'errore!
    Ora posso capire che inserisce nel dabatase il prodotto visto che l'istruzione DBConnection.insertProduct(newProduct) è fuori dall'else, ma perché non mostra più l'errore?!

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ah, avevo scritto il messaggio prima di vedere quello di Alex. Comunque mi rimane la curiosità di questa cosa!
    Posso fare come dice Alex, però è un controllo che devo inserire in diverse parti del codice quindi volevo trovare una soluzione più snella se possibile!
    Vorrei anche evitare che l'utente possa inserire una lettera al posto di un numero. Ho letto che esistono gli InputVerifier. E' macchinoso scriverne uno ed eventualmente chiamarlo ad ogni inserimento?
    Grazie.

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Ah, avevo scritto il messaggio prima di vedere quello di Alex. Comunque mi rimane la curiosità di questa cosa!
    Posso fare come dice Alex, però è un controllo che devo inserire in diverse parti del codice quindi volevo trovare una soluzione più snella se possibile!
    Perché non incapsuli quella logica in un metodo a parte, che richiami quando ti serve?




    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Vorrei anche evitare che l'utente possa inserire una lettera al posto di un numero. Ho letto che esistono gli InputVerifier. E' macchinoso scriverne uno ed eventualmente chiamarlo ad ogni inserimento?
    Grazie.
    Usare un InputVerifier è piuttosto banale: http://www.javaexamplecenter.com/win...utverifier.php
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Mmm sto provando a usare la classe InputVerifier.
    Ecco come l'ho fatta (è solo una bozza per ora):

    codice:
    public class UserInputVerifier extends InputVerifier {
        
      public UserInputVerifier() {
      }
    
      @Override
      public boolean verify(JComponent input) {
        
        JTextField textField = (JTextField) input;               
    
        /* Verifico che il campo non sia vuoto o composto di soli spazi */
        
        if ( textField.getText().trim().isEmpty() ) {
          JOptionPane.showMessageDialog(null, "Campo vuoto!", "", JOptionPane.WARNING_MESSAGE);
          return false;
        }
        else {
          
          return true;      
        }
      }
    }
    E nella classe dove mi serve la uso così:
    InputVerifier verifier = new UserInputVerifier();
    productPrice.setInputVerifier(verifier);

    Ma così facendo appena clicco sul campo productPrice mi appare quel messaggio! E non riesco più a fare niente!
    Ultima modifica di Jamie04; 11-04-2014 a 21:01

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Ma così facendo appena clicco sul campo productPrice mi appare quel messaggio! E non riesco più a fare niente!
    Innanzitutto il concetto di uso di InputVerifier è di fare in modo che il componente di input non ceda mai il focus ad un altro componente (nella stessa finestra) se l'input è invalido.

    Inoltre se guardi la documentazione, vedi che dice che verify non dovrebbe avere "effetti collaterali", ovvero qualunque altra cosa diversa dal solo dire true=ok, false=no. Mentre invece shouldYieldFocus dice che può avere effetti collaterali.
    In effetti JComponent invoca solo ed esclusivamente shouldYieldFocus e questo invoca (per come è implementato in modo predefinito), semplicemente e direttamente verify.
    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.