Désactiver la saisie mais conserver le curseur

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je fais actuellement une calculatrice pour m'initier au java. J'ai des boutons et un input correspondant aux calculs à effectuer.

J'ai "bind" les boutons de telle sorte que quand j’appuie sur l'un d'eux, le texte du bouton est append à la droite du curseur.

Par exemple, si j'appuie sur '+' de mon clavier, le bouton '+' de la calculatrice se déclenche et ajoute à la droite du curseur de l'input correspondant au calcul, l'opérateur '+'.

Le problème est le suivant : comment totalement désactiver la saisie utilisateur, sans pour autant désactiver l'input (et donc conserver le curseur) ? Actuellement, pour reprendre l'exemple ci-dessus, j'ai deux '+' qui se collent à la droite du curseur car l'input n'est pas désactiver donc il prend l'entrée '+', et le "bind" du bouton + en rajoute un lui aussi. Dans l'idée, le but est de desactiver l'input pour empêcher les utilisateurs de rentrer des caractères non autorisés (genre des lettres, des caractères spéciaux). En sachant aussi que j'accepte certains caractères comme les '!' ou les '^' car ils ont un sens mathématique.

J'ai déjà trouvé des réponses comme désactiver l'input (inutilisable car désactive aussi le curseur), les formatedTextField et les DocumentFilter, mais je ne sais pas trop comment les utiliser dans cette application.

D'avance, merci pour votre aide ! Cordialement, krostar

+0 -0

Salut,

Je ne comprends pas pourquoi vouloir garder le curseur si tu ne souhaites pas que l'input soit utilisable en tant que tel. Un input avec un curseur dedans, c'est un code implicite pour dire à l'utilisateur "hey, vous pouvez taper du texte là-dedans". Si ce dernier point n'est pas possible, laisser tomber le curseur est une meilleure idée.

Tu peux parser chaque caractère grâce au regex java et afficher une erreur si l utilisateur entre des synthaxes impossibles. Sinon tu peux utiliser des JLabels pour afficher les calculs/resultats: dans ce cas là aucune interaction avec le curseur de l utilisateur n est possible ^^. Voila,voila

Bonjour,

Avant toute chose, merci pour votre aide. Je me suis peut-être mal exprimé : L'input est systématiquement focus, rien ne peut enlever son focus (volontairement). De là, j'ai bind (par exemple) la touche 6 pour qu'elle appuie sur le bouton 6 de la calculatrice qui appelle un méthode qui ajoutera le caractère à la droite de mon curseur (focus dans l'input). De fait, si je déplace mon curseur dans l'input et que je clique sur des boutons de la calculatrice, son entrée va être ajoutée à droite de l'emplacement actuel du curseur.

@adri1 : côté utilisateur, le resultat revient au même : il appui sur les touches du clavier sans se soucier de savoir d'où vient (par exemple) le 6 qui s'est ajouté dans l'input. Qu'il ai été ajouté de manière directe en tapant dans l'input OU que je ne prenne pas en compte l'input mais que le resultat revienne au même, ça ne change rien pour lui :/

Dans la finalité, j'ai fait un truc SUPER SALE !

Au moment ou je fais un setText de l'input dans l'action d'un bouton, je rajoute un prefixer. De là j'ai un DocumentFilter qui ajoute, seulement si j'ai le préfix, le text de l'input.

C'est sale, mais c'est fonctionnel.

Merci à vous deux ;)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte