Lorsque vous tapez MyTextFieldMaxLength2:
a) marque '1' et cliquez sur le numéro 9 => sera remplacé = '9'. .. ok
b) '12' marque et cliquez sur le numéro 9 => rien ne se passeJavaFX: propre TextField avec un maximum de 2 caractères ... ne peut pas remplacer tous les caractères marqués
Comment puis-je obtenir cela même si tous les deux numéros sont marqués, cela est remplacé par un nouveau numéro?
public class MyTextFieldMaxLength2 extends TextField {
public boolean ifCondition_validate(String text) {
return (getText().length() < 2 || text.equals("")) && text.matches("[0-9]*");
}
@Override
public void replaceText(int start, int end, String text) {
if (ifCondition_validate(text)) {
super.replaceText(start, end, text);
}
}
@Override
public void replaceSelection(String text) {
if (ifCondition_validate(text)) {
super.replaceSelection(text);
}
}
}
Tout d'abord, merci pour la solution. Je travaille sur une grande application graphique, en utilisant SceneBuilder. J'aime le concept de propres classes TextField avec des propriétés spéciales à construire, puis uniformément sur pour utiliser SceneBuilder. J'espérais qu'il y avait une solution au problème directement dans le MyTextFieldMaxLength2-class , de sorte que la fonctionnalité peut être regroupée proprement dans les classes TextField dérivées. Je vais attendre encore quelques jours peut-être que quelqu'un a une idée. Dans l'autre cas, je prends votre solution. Merci encore. – Sten
@Sten pourquoi n'utilisez-vous pas simplement cette solution dans une sous-classe de champ de texte? –
J'ai abandonné mon idée en utilisant la sous-classe TextField. Je reste avec votre approche directe et n'ai que la méthode de filtrage statique reconstruite. Je dois donc utiliser les méthodes de filtrage, par ex. "filter_onlyMax2Numbers", "filter_only0xOr1xComma" seulement une fois et peut ensuite les utiliser n'importe où dans l'application. C'est comme ça que ça fonctionne très bien. Je vous remercie. – Sten