J'ai un Jtextfield nommé tPvv, a écrit un DocumentFilter pour n'accepter que des nombres, longueur maximale de 3.Et j'ai un bouton éditer, quand je clique sur ce bouton la ligne entière chargée dans les champs de texte pour l'édition depuis le jtable (la valeur dans Jtextfield tPvv reste constante). Les Jtextfield qui sont définis sans documentFilter fonctionnent bien (charge les valeurs de jtable dans les champs de texte en fonction de la sélection de ligne). Aussi quand je commente le DocumentFilter cela fonctionne bien, mais je ne peux pas fournir la validation (accepter le nombre seulement et la longueur de 3).jtextfield documentFilter une fois défini, valeur ne chargeant pas dans le jtextfield
Je dois vérifier la validation du tPvv et charger les valeurs de jtable en fonction de la sélection de ligne différente en cliquant sur le bouton d'édition.
`class NumericAndLengthFilter extends DocumentFilter {
/**
* Number of characters allowed.
*/
private int length = 0;
/**
* Restricts the number of charcacters can be entered by given length.
* @param length Number of characters allowed.
*/
public NumericAndLengthFilter(int length) {
this.length = length;
}
@Override
public void insertString(FilterBypass fb, int offset, String string,
AttributeSet attr) throws
BadLocationException {
if (isNumeric(string)) {
if (this.length > 0 && fb.getDocument().getLength() + string.
length()
> this.length) {
return;
}
super.insertString(fb, offset, string, attr);
}
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text,
AttributeSet attrs) throws
BadLocationException {
if (isNumeric(text)) {
if (this.length > 0 && fb.getDocument().getLength() + text.
length()
> this.length) {
return;
}
super.insertString(fb, offset, text, attrs);
}
}
/**
* This method tests whether given text can be represented as number.
* This method can be enhanced further for specific needs.
* @param text Input text.
* @return {@code true} if given string can be converted to number; otherwise returns {@code false}.
*/
private boolean isNumeric(String text) {
if (text == null || text.trim().equals("")) {
return false;
}
for (int iCount = 0; iCount < text.length(); iCount++) {
if (!Character.isDigit(text.charAt(iCount))) {
return false;
}
}
return true;
}
}
//((AbstractDocument) tPvv.getDocument()).setDocumentFilter(new NumericAndLengthFilter(3));
`dernière ligne a commenté i défini dans mon code pour l'appel fin de validation. S'il vous plaît résoudre ce problème.
pour un nombre textfield accepter seulement (même avec une longueur limitée), vous pouvez aussi jeter un oeil à [cette question] (http://stackoverflow.com/a/13424140/1076463) – Robin