Newsgroup: it.comp.java
Titolo: Uffff....mi date una mano con questa manciata di righe di codice?

Salve a tutti.
Il mio scopo è il seguente : da una serie di JTextField  estraggo i
valori immessi e li piazzo tutti in un bell'array di stringhe.
Ora io devo controllare che in tali stringhe ci siano numeri ( double
per essere precisi ) e nemmeno un carattere che sia diverso da un
numero. Come faccio tale controllo?
Io ho pensato e provato col seguente metodo 
private boolean NotNumber(String[] cnn) {
        for ( int i=0; i<cnn.length; i++) {
            try {
                double r = java.lang.Double.parseDouble(cnn[i]);
            } catch ( NumberFormatException nfe ) {
                MioDialog NotNumDialog = new MioDialog(this, true,
"You have insert an invalid character : " + cnn[i] + "       ");
                NotNumDialog.setLocationRelativeTo(this);
                NotNumDialog.setVisible(true);
                return true;
            }
        }
        return false;
    }
Ho praticamente usato la sollevazione da parte di Java dell'eccezione
NumberFormatException nel caso di double non valido e l'ho gestita a
modo mio. Scansiono l'array e se la intercetto appare un JDialog che
avverte l'utente e ritorno con true.
Se invece la scansioen dell'array di stringhe va tutto ok ritorno con
false.
Ora a me questa implementazione mi sta creando difficoltà in un' altra
frazione di codice e mi chiedevo se ne esistesse una diversa.
Poi magari valuto io se va bene per il mio esempio. Se vi servono
altre info per kapire meglio ditemi ....ho provato a scrivervi tutto
il problema .... ma mi sono incartato anche li :))))) 
quindi per ora vi passo quel frammento
grazie a tutti  
ciaooooo :)))))
 

 e mi chiedevo se ne esistesse una diversa.
Come sempre, esistono più soluzioni allo stesso quesito, ma mi vengono
in mente solo alternative più complesse.
La maggiore complessità può essere giustificata se la soluzione
semplice ti dà problemi; posta i problemi che cerchiamo di incasinarci
per risolverli :-) .
Ciao,
Mauri.
-- 
La forza di gravità è un falso mito,
è la Terra che succhia!

Ok provo a spiegarvi la situazione. 
Allora ho una sorta di form inserito in un JFrame. 
Ci sono una 20 di textfield al suo interno e 6 JCheckBox raggruppati a
due a due in 3 ButtonGroup. 
A secondo della combinazione di tali checkbox si visualizzano un certo
numero di quei textfield...cioè quelli che effettivamente servono
mentre quelli inutili li nascondo con un setVisible(false) per evitare
errori o confusione.
Una parte di tali textfield è invece sempre visibile in quanto comune
a tutte le scelte possibili. 
Quindi alla pressione del pulsante invio io faccio questi controlli:
1) che in ognuno dei tre ButtonGroup almeno uno dei chechk box sia
selezionato...sennò non parte il test. E questo l'ho fatto.
2) che (data la selezione efeftuata) i textfield che servono ( cioè
quelli per cui ho messo setVisible(true)) non siano lasciati in
bianco. Ricordo che questi non sono quelli che sono sempre
visibili....sono differenti. E questo l'ho fatto.
3) Che i valori immessi siano numeri e non caratteri non validi. E qui
sta il problema.
4) che tali valori siano compresi in un dato intervallo fisso. E
questo l'ho fatto. 
Quindi ho pensato di fare nel metodo di actionPerformed una nidata di
if-else....in modo di andare poer esclusione verso il JDialog finale
che dice che è tutto ok attraverso gli else.
Posto ora la parte del metodo di risposta all'evento di pressione 
spero che sia leggibile 
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        MioDialog md;   // è un mio dialog personalizzato
        JTextField[] y = GetArray();  // prendo l'array dei textfield
attivati 
        String[] x = TextToArray(y); // ne metto il contenuto in un
array di stringhe uno per riga ovviamente
        // Inizio la serie dei test.
        //Verifico  in primis la selezione dei checkbox
        if ( x[0].equals("no") ) { 
                  md = new MioDialog( this, true, "The model you have
selected is not valid" );
                 md.setLocationRelativeTo( this );
                 md.setVisible(true);   
        } else {   
                   // verifico che che non ci siano campi vuoti       
                  JTextField[] w = GetCommonArray(); // prendo l'array
di quei  TextField che sono sempre visibili
                  String[] z = TextToArray(w); // ne piazzo i campi in
un array di stringhe
                  //il seguente  metodo mi da true se si sono lasciati
campi blank e false altrimenti
                  boolean a = AreThereBlankFields(x), 
                                b = AreThereBlankFields(z);
                  if ( a || b ) {
                        md = new MioDialog(this, true, "Blank
fields");
                        md.setLocationRelativeTo(this);
                        md.setVisible(true);
                 } else {
                             if ( caratteri non validi) {
                                    // kua sono fermo perchè se
imposto in un modo la condizione dell'if entro in conflitto con la
parte di istruzioni nel corpo dell'if stesso e vciceversa 
                            } else {
                                       if ( intervalli rispettati) { 
                                           ..questa parte l'ho fatta
                                          ma non ancora inserita
                                       } else { 
                                              qua parte il JDialog 
                                          che conferma che tutto è OK
                                                }     
                                     }
                          }
               }
}
Premetto che i miei metodi che vedete chiamati funzionano bene.
Io credo questo : poichè la struttura dei controlli è if-else-if e
credo che sia la migliore ( mi sbaglio) per questo caso mi serve un
alternativa al metodo NotNumber che sta nel post iniziale o magari un
modo per poterlo far funzionare bene kon la nidata di if. Giuro che mi
ci sono sfranto ma non ne sono venuto a capo....credevo poi che con un
do-while andasse...ma nulla. Ah un'ultima cosa .... i JDialog sono
modali e si chiudono con la crocetta in alto a dx ( vi confesso che
non sono riuscito a impostare l'evento di chiusura mediante il
pulsante ok in quanto non ho trovato l'oggetto  JButton nel
JOptionPane che ho usato... gghghghghg 
mi cospargo il capo di cenere ).
Come al solito se qualcosa non è chiaro dite pure ...cercherò di
spiegare meglio.
Grazie mille
ciaooooo :))))
P.S. 
sento che la soluzione sarà una ca**ata immensa......capita sempre
cosi :))) 

 mi cospargo il capo di cenere ).
tratto dalla API:
Object[] options = { "OK", "CANCEL" };
JOptionPane.showOptionDialog(null, "Click OK to continue", "Warning",
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,
null, options, options[0]);
Cosě non funziona?
Ciao
    SkyNet

zitti tutti che ci sono riuscito :))))
Vi faccio vedere come ....lo sapevo che era una cavolata 
private boolean CheckNumberValue(String[] cnn) {
        for ( int i=0; i<cnn.length; i++) {
            try {
                double r = java.lang.Double.parseDouble(cnn[i]);
            } catch ( NumberFormatException nfe ) {
                return true;
            }
        }
        return false;
    }
questo sarebbe il metodo NotNumber modificato : praticamente al
momento in cui intercetto l'eccezione non faccio apparire il dialog. 
In questo modo quando vado a fare 
boolean alfa = CheckNumberValue(x) ritorno true se l'eccezione è stata
sollevata e a quel punto faccio 
if ( alfa ) {
               appare dialogo di errore
              } else { bla bla bla bla bla 
}
Comunque ringrazio chi mi ha risposto :)))) 
A risentirci presto ..................visto che ora viene il bello (
comunicazione applet-server , interazione con codice nativo e ritorno
di un grafico ) e visto che parecchie cose non le conosco. 
ciaooooo :)))))))