PDA

View Full Version : [java] no numeri in un text field


antoniod82
01-09-2007, 21:26
Ho definito dei text field in un pannello per inserire nome e cognome (per esempio per un 'applicazione che richiede la registrazione) e voglio verificare che non contengano caratteri diversi da lettere (per esempio nessun numero o segni d'interpunzione) .

Esiste un metodo che, se gli passo il text field, sa verificarlo?

grazie.

andbin
01-09-2007, 21:38
Ho definito dei text field in un pannello per inserire nome e cognome (per esempio per un 'applicazione che richiede la registrazione) e voglio verificare che non contengano caratteri diversi da lettere (per esempio nessun numero o segni d'interpunzione) .

Esiste un metodo che, se gli passo il text field, sa verificarlo?Semplice: creando un apposito Document (PlainDocument nel nostro caso) da applicare al JTextField.

class LetterDocument extends PlainDocument
{
public void insertString (int offs, String str, AttributeSet a)
throws BadLocationException
{
if (str != null)
{
char[] vch = str.toCharArray ();
int i, j;

for (i = 0, j = 0; i < vch.length; i++)
{
if (Character.isLetter (vch[i]) || Character.isWhitespace (vch[i]))
vch[j++] = vch[i];
}

super.insertString (offs, new String (vch, 0, j), a);
}
}
}

....

JTextField tf = new JTextField (30);
tf.setDocument (new LetterDocument ());

antoniod82
02-09-2007, 18:57
caro Andrea,

Innanzitutto ti ringrazio per il puntuale e proficuo consiglio, ma mi è insorta una complicazione a cui nn avevo pensato: la gestione di cognomi contenenti spazio (es di giacomo) o apostrofi (es. d'anna).

Per lo spazio ho risolto perchè ho trovato l'apposito metodo.

Potresti aiutarmi nello gestire il char presente nel vettore in modo che nn sia scartato quando è un apostrofo??

grazie.

andbin
02-09-2007, 20:32
mi è insorta una complicazione a cui nn avevo pensato: la gestione di cognomi contenenti spazio (es di giacomo) o apostrofi (es. d'anna).

Per lo spazio ho risolto perchè ho trovato l'apposito metodo.Per gli spazi ci avevo già pensato io mettendo il test con Character.isWhitespace(). Però, a dire il vero, un "whitespace" è un concetto più ampio rispetto al solo spazio.

Metti questo test:

if (Character.isLetter (vch[i]) || vch[i] == ' ' || vch[i] == '\''))

antoniod82
02-09-2007, 20:53
Per gli spazi ci avevo già pensato io mettendo il test con Character.isWhitespace(). Però, a dire il vero, un "whitespace" è un concetto più ampio rispetto al solo spazio.




scusami, nn avevo copiato integralmente il codice che mi avevi proposto, così per lo spazio avevo risolto in un altro metodo.

Cmunque grazie ancora per l'ultimo suggerimento

antoniod82
03-09-2007, 12:05
se hai ancora un pò di pazienza ti volevo sottoporre la seguente riga:

dataAcquisto=(new java.util.Date()).getYear()+1900+"-"+((new java.util.Date()).getMonth()+1)+"-"+(new java.util.Date()).getDate();

in sostanza m'interessa che in dataAcquisto vada la data che il sistema preleva da windows , ma nel modo suddetto ottengo la data nel formato 2007-9-2 , mentre vorrei qualcosa del tipo 2007-09-02 , sai se c'è un metodo diretto (vorrei evitare di dover scrivere qualcosa di molto articolato)

grazie, ciao

andbin
03-09-2007, 12:19
dataAcquisto=(new java.util.Date()).getYear()+1900+"-"+((new java.util.Date()).getMonth()+1)+"-"+(new java.util.Date()).getDate();:eek: Noooo. A parte che è lunga un chilometro ma in ogni caso i vari metodi getYear() ecc.. sono deprecati e quindi da non usare più.

import java.text.*;
import java.util.*;
....

DateFormat df = new SimpleDateFormat ("yyyy-MM-dd");
String str = df.format (new Date ());Questo è il modo più semplice e valido per formattare una data in un formato specifico.

antoniod82
03-09-2007, 20:13
i tuoi consigli sono sempre perfetti, ti ringrazio.

Ora devo gestire un'altra connessione con rmi, spero di nn trovare grosse difficoltà!!

ciao.