Newsgroup: it.comp.java
Titolo: Verifica contenuto textfield

semplice domanda:
come posso verificare che un textfield contenga solo numeri e testo senza
caratteri strani?...
Grazie 1000
Oxy

 ha scritto nel messaggio
news:gk4X8.22495$7N3.5...@twister2.libero.it...

Un'idea poco consona forse, ma che funziona, è definire uno Stringtokenizer:
String set="£$%&/(" //insomma, ci metti tutti i caratteri strambi che vuoi
eliminare;
String frase=tuotextfiled.getText();
StringTokenizer st=new StringTokenizer(frase,set);
a questo punto mi sembra che esista un metodo che ti ritorna il numero di
token incontrati altrimenti usi
int cont=0;
while(st.nextToken()) {
    cont++;
}
if (cont==0) {
    allora la frase è valida
} else {
    la frase contiene caratteri strambi
}
Purtroppo non mi ricordo tanto bene i metodi della classe StringTokenizer,
ma questo dovrebbe essere giusto, o almeno l'idea di base!

 ma questo dovrebbe essere giusto, o almeno l'idea di base!
Dunque non ci sono scorciatoie!... devo cercare i singoli caratteri...
ahh.... come rimpiango il PERL! :)
Grazie

 ha scritto nel messaggio
news:JxdX8.23560$7N3.5...@twister2.libero.it...

Puoi utilizzare le classi Double, Integer, Float
   String temp = new String("il tuo numero");
   try
    {
    double t = Double.parseDouble(temp);
    }
  catch(NumberFormatException err)
    {
    JOptionPane.showMessageDialog(rifFrame,"Variable t must be a
number!","Error",JOptionPane.ERROR_MESSAGE);
    }

Ecco questo sul mio PC  funziona perfettamente!...
Basta specificare il carattere di sostituzione e i caratteri da sostituire.
Ma funzionera' su qualsiasi sistema?... Il numero associato al carattere non
cambia mai?
// ela stinga da verificare
// S1 sostituisce i caratteri non validi
String S="abce;sd=", S1=" ";
 System.out.println(  pulisciSTR(S,S1);
//////////////////
  String pulisciSTR(String S, String S1){
    for(int z=0;z<S.length();z++){
          int c=(int)S.charAt(z);
        if( c<31 || c>126 || c==35 || c==36 || c==38 ||  c==58 || c==59 ||
c==61  || c==94 || c==95 || c==96 )
S=S.substring(0,z-1)+S1+S.substring(z+1,S.length());
     }
  return S;
  }

ops: S=S.substring(0,z)+S1+S.substring(z+1,S.length());



estendi jtextfield e implementi un apposito document model. oppure crei
il document model e lo assegni ad un jtextfield.
segue un jtextfield che serve a prendere un importo in euro con al max 2
decimali dopo la virgola. derivato da un esempio corposo trovato su
codeguru: (
http://www.codeguru.com/java/articles/662.shtml
).
da notare:
-) createDefaultModel: metodo che crea il modello per il jtextfield
quando viene creato. qui viene impostato il modello contenuto nella
classe EuroNumberDocument.
ciao
/************************************************************/
import javax.swing.text.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import java.awt.*;
 //lavora con stringhe ma accetta solo numeri e il separatore decimale
 //limita a due cifre dopo la virgola
public class EuroTextField extends JTextField
{
   private NumberFormat nf;
   private char SEP_DEC = ','; //separatore decimale
   private int MAX_DV = 2; //numero max di cifre dopo la virgola
   public EuroTextField() {
      super();
      nf = NumberFormat.getNumberInstance();
   }
   public EuroTextField(String val) {
      this();
      setText(val);
   }
   protected Document createDefaultModel() {
      return new NumberDocument();
   }
   protected class NumberDocument extends PlainDocument
   {
        public NumberDocument()
        {
            super();
        }
        public void insertString(int offset, String string, AttributeSet
as) throws BadLocationException
        {
             char [] src = string.toCharArray();
             char [] dest = new char[src.length];
             int count = 0;
             int idxvirgola = getText(0,getLength()).indexOf(SEP_DEC);
             for (int i=0; i < src.length; i++) {
                if (src[i] == SEP_DEC) {
                    //e'  una virgola
                    if(idxvirgola == -1) {
                        //non ne abbiamo altre
                        dest[count++] = src[i];
                    }
                } else {
                    if(Character.isDigit(src[i])) {
                        //e' un numero
                        int ndv = 0;
                        if(idxvirgola != -1) {
                            //quante cifre abbiamo dopo la virgola?
                            ndv = getLength() - idxvirgola -1;
                        }
                        if(ndv < MAX_DV)
                            dest[count++] = src[i];
                    }
                }
             }
 
             super.insertString(offset, new String(dest, 0, count), as);
        }
    }
}
/************************************************************/
-- 
Seti@Home Java Applets
http://maruko.cjb.net/

     }
non fa al caso mio, devo prendere anche il testo tranne alcuni caratteri.
Poi sono in AWT...
Ps in AWT non ci sono degli  alert(),  confirm()...  senza dovermi fare un
frame apposito?
Grazie

 ha scritto nel messaggio
news:agk6jr$m9dc7$1...@ID-121868.news.dfncis.de...
Come non detto....
ho letto male la domanda!