Limiter un JTextField a la saisie d'un numérique? [Résolu] [Java] - Java - Programmation
Marsh Posté le 24-05-2002 à 16:58:14
je crois pas que ca existe mais c'est très facile a faire.
voila la fonction en javascript, je l'avai fait en java a l'époque mais je l'aii plus sous la main (mais c'est très semblable, tu aura pas de mal a adapter).
Code :
|
tu met un listener sur ton textfield, et quand il est modifié tu appelle une focntion style celle plus haut.
Marsh Posté le 24-05-2002 à 17:11:37
mr_mat a écrit a écrit : je crois pas que ca existe mais c'est très facile a faire. voila la fonction en javascript, je l'avai fait en java a l'époque mais je l'aii plus sous la main (mais c'est très semblable, tu aura pas de mal a adapter).
|
pas bete comme méthode, merci, ca m'a l'air plus simple que la méthode du JFormattedTextField
Marsh Posté le 24-05-2002 à 17:15:00
a la place des && bourrins tu peut simplement mettre if (c<'0' || c>'9' (où la variable c est de type char)
[jfdsdjhfuetppo]--Message édité par mr_mat le 24-05-2002 à 17:15:23--[/jfdsdjhfuetppo]
Marsh Posté le 24-05-2002 à 18:39:43
mr_mat a écrit a écrit : a la place des && bourrins tu peut simplement mettre if (c<'0' || c>'9' (où la variable c est de type char) |
en fait ca marche pas si bien que ca : si on tappes lentement, il y a aucun problème, par contre si tu maintiens une touche non autorisée enfoncée (m par exemple) ils ne sont pas tous eliminés
Personne n'a deja essayé de coder ca avec un JFormattedTextField??
Marsh Posté le 24-05-2002 à 22:34:48
Zizou a écrit a écrit : en fait ca marche pas si bien que ca : si on tappes lentement, il y a aucun problème, par contre si tu maintiens une touche non autorisée enfoncée (m par exemple) ils ne sont pas tous eliminés Personne n'a deja essayé de coder ca avec un JFormattedTextField?? |
a mon avis tu intercepte keytyped.
en fait il faut intercepter keyup et keydown.
Marsh Posté le 25-05-2002 à 12:08:13
une façon de faire c'est que à chaque fois, tu vires tous les caractères qui ne sont pas des chiffres. Comme ca, même si un évenement n'est pas intercepté, la lettre sera effacé par l'évenement d'après.
comment ca c'est du bidouillage ????
Marsh Posté le 25-05-2002 à 13:37:13
Il y a une methode tres sympa decrite dans le tutorial swing de Sun. En fait tu construit ton JTextField avec un objet heritant de PlainDocument (c'est le classe utlkisée par defaut), dans lequel tu redefini la methode qui insere les chaines de caracteres, pour n'accepter que les chiffres.
Desole c'est pas clair mais ca fait longtremps que j'ai pas fait de Java. Va voir sur le tutorial Sun, c'est explique tres clairement.
Marsh Posté le 28-05-2002 à 00:27:24
voici la page en question :
http://java.sun.com/docs/books/tut [...] field.html
avec la classe qui implémente ce mécanisme :
http://java.sun.com/docs/books/tut [...] Field.java
Marsh Posté le 28-05-2002 à 16:09:11
euh avec un JFormattedTextField(#########), ça fonctionne tout seul.
En gros, ça fait comme un JTextField, avec DefaultStyledDocument, et un test sur Character.isDigit() lors de la saisie
Edit : un ch'ti lien :
http://java.sun.com/j2se/1.4/docs/ [...] 4/ftf.html
[jfdsdjhfuetppo]--Message édité par Wons le 28-05-2002 à 16:10:14--[/jfdsdjhfuetppo]
Marsh Posté le 28-05-2002 à 16:26:17
merci pour l'info, mais ca c'est uniquement jdk1.4 on dirait ...
Marsh Posté le 28-05-2002 à 16:44:28
benou a écrit a écrit : merci pour l'info, mais ca c'est uniquement jdk1.4 on dirait ... |
Euh bah oui.
Si c'est du java 1.3, faut passer par un StyledDocument
Un peu comme ça :
public class toto {
toto() {
DSD styledDoc = new DSD();
this.setDocument(styledDoc);
}
}
class DSD extends DefaultStyledDocument {
DSD() {}
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
for (int i=0; i<str.length(); i++) {
if (Character.isDigit(str.charAt(i)))
super.insertString(offs+i, str.charAt(i), a);
}
}
}
Avec un truc comme ça, il accepte tout les chiffres. Il accepte aussi les copier-coller, mais il ne prendra que les chiffres dans le texte à coller.
Je suis pas sûr du truc, mais ça doit ressembler à un truc comme ça.
Marsh Posté le 28-05-2002 à 17:57:21
ouais c'est ca ... y a le code dans un des liens que j'ai filé ..
Marsh Posté le 29-05-2002 à 10:02:23
Voila une méthode basé sur les listeners, c'est peut etre pas la plus belle mais elle a le mérite de fonctionner :
import java.awt.event.*;
public class NumericField extends javax.swing.JTextField {
private javax.swing.JTextField jf;
public NumericField() {
super();
this.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(KeyEvent e) {
onlyNumeric(NumericField.this);
}
public void keyTyped(KeyEvent e) {
onlyNumeric(NumericField.this);
}
private void onlyNumeric(NumericField np) {
String s = np.getText();
if (!(s.length()==0)) {
char c = s.charAt(s.length()-1);
// on elimine tous les caractères non numérique, et également le point s'il y en
//a deja un.
if ((c<'0' || c>'9' && (c!='.' ||
((c=='.' && (s.substring(0,s.length()-1).indexOf('.'!= -1) )) {
np.setText(s.substring(0,s.length()-1));
}
}
}
});
}
}
Merci à tous ceux qui m'ont permis de résoudre mon problème.
Marsh Posté le 30-05-2002 à 01:30:08
si jamais ca peut intéresser quelqu'un, j'ai développé un TextField qui permet de ne saisir que des Float. Ca marche bien et c'est pratique à utiliser.
ca s'utilise comme ca :
Code :
|
et voici le source de la classe. Elle est améliorable, mais bon ...
Code :
|
[jfdsdjhfuetppo]--Message édité par benou le 30-05-2002 à 01:33:45--[/jfdsdjhfuetppo]
Marsh Posté le 03-06-2002 à 14:38:46
Moi pareil, c'est pour saisir des entiers, il y a nu jtextfield, deux boutons pour augmenter/diminuer la valeur, et un troisième pour afficher un jslide pour ajuster la valeur, si il y en a d'interressés ... c'est pas encore la version finale, mais elle marche bien, et bien commentée (et pas trop longue) donc voilà :
dites-moi ce que vous en pensez
Code :
|
Marsh Posté le 11-06-2002 à 22:48:01
ca marche très bien avec les "Document" ...
Marsh Posté le 12-06-2002 à 09:53:06
ton code est assez propore mais je mettrait pas l'init des tes objets GUI dans le constructuer mais dans une méthode privée séparée.
C'est un détail mais ca peut aider ...
Marsh Posté le 14-06-2002 à 09:29:01
c clur, c'est un peu limite crade mais bon c'est juste une chtite classe un peu vite fait !
Marsh Posté le 24-05-2002 à 16:54:04
Voila tout est dans le titre. Il y a pas une classe toute faite?
Ou bien il faut utiliser JFormattedTextField? Mais j'ai pas envie de faire des lignes de code que des dizaines de personnes ont du le faire déja. Alors si c'est le seul moyen, qq pourrait-il me passer un exemple de code faisant ca? Ou bien me donner une url m'indiquant ou je peux trouver ce genre de problème classique illustré par du code.
Merci
[jfdsdjhfuetppo]--Message édité par Zizou le 29-05-2002 à 10:03:56--[/jfdsdjhfuetppo]