English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
Toutes les catégories

Bonjour,
je voudrai savoir comment verifier que ma chaine que je recupere dans mon jTextField est vide.
j'ai essayais: jTextField.getText().toString() != ""
et jTextField.getText() != null
mais aucn des deux ne marche
et est ce possible de limiter la lomgueur de la chaine saisie par l'utilisateur a 40 caracteres ?

2007-02-16 05:59:31 · 2 réponses · demandé par Anonymous dans Informatique et internet Programmation

2 réponses

Pour répondre dans l'ordre :

jTextField.getText().toString != "" ne marche pas toujours : le != et == vérifient l'identité (cad que ta vatiable et "" sont au même offset, cad sont le même objet). Cela marche parfois pour des raisons de perf car la JVM a tendance à factoriser les chaines constantes. pour tester l'égalite de valeur de chaines de caractères utilise la méthde equals :

note que getText() retourne déja un String, tu n'a donc pas besoin de .toString() à la suite. Ca marche aussi mais c'est innutile et alourdit ton code.

le bon test est par exemple :
jTextField.getText() !=null
&& !jTextField.getText().equals( "" )

en sachant que !jTextField.getText().equals( "" ) devrait suffire. Note bien le !.

Pour le restepour limiter la taille du contenu, attention à ne pas tomber dans le piège de de jTextField.setMaximumSize(...), qui sert à définir la taille du composant et non de son contenu.

De même, jTextField.setColumns(...) permet de fixer la taille (graphique) du jtextfield en indiquant sa longueur en caractères et non en pixels, mais si l'on tappe plus de caractères que le maximum visualisable fixé par cette fonction, la saisie fonctionne et certainscaractères ne sont pas affichés.

Le composant n'offre pas, à ma connaissance, tu peux par exemple, définit un listener qui lorsque la propriété text change, la tronque si elle dépasse 40 caractères.

La solution de définir une classe surchargeant jTextField me semble + compliquée car elle t'obligerait à remplacer lout tes composants jtextfield. C'est toutefois + propre.

Voici un exemple d'une telle classe :

public class MonTextField extends JTextField {

private boolean utilityKeyPressed=false;
private int maxChar = 10;

public MonTextField(int max) {
super();
maxChar = max;
this.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) { checkutilityKey(e); }
public void keyTyped(KeyEvent e){ checklenght(e); }
public void keyReleased(KeyEvent e){ e.consume(); }
}
);
}
/*Vérification des touches BACKSPACE,LEFT,RIGHT pour les gardées actives*/
private void checkutilityKey(KeyEvent e) {
utilityKeyPressed = (e.getKeyCode()==e.VK_BACK_SPACE || e.getKeyCode()==e.VK_LEFT || e.getKeyCode()==e.VK_RIGHT || e.getKeyCode()==e.VK_UP || e.getKeyCode()==e.VK_DOWN);

}

/*Vérification de la longueur*/
private void checklenght(KeyEvent e) {
if(!utilityKeyPressed && this.getText().length()=>maxChar)e.consume();

}
}

2007-02-16 10:40:26 · answer #1 · answered by Hum... 3 · 0 0

Effectivement tu ne peux pas utiliser l'opérateur == ou != car ils comparent des pointeurs.

Si tu veux comparer des chaînes utilise la méthode equals :
chaine1.equals(chaine2)
ce qui pour la comparaison que tu veux faire, donne :
! (jTextField.getText().toString().equals (""))
(il n'y a pas de méthode not equals donc tu dois t'exprimer par le contraire)

Dans ton cas si ce qui t'intéresse est juste de savoir si la chaîne est vide je vois une méthode plus rapide :
chaine.length() == 0
(ici pas de problème car les entiers ne sont pas des pointeurs)

Pour ta dernière question je regarderais du côté de la méthode JTextField.setColumns mais je n'ai pas testé.

2007-02-18 05:03:13 · answer #2 · answered by t_cordonnier 7 · 0 0

fedest.com, questions and answers