2017-09-20 2 views
1

Eh bien ... J'ai un TextField et je voudrais que le texte tapé n'apparaisse pas dans le composant, il suffit de le lire.Comment faire pour que le texte n'apparaisse pas dans un objet TextField?

La raison en est que je veux lire une clé en utilisant l'événement onKeyPressed et afficher la touche enfoncée dans getEvent(). Méthodes GetName() d'un KeyEvent.

Mais il y a des problèmes:

  • lorsque vous appuyez sur la touche Suppr, la lettre « D » est supprimée du texte TextField.
  • Lorsque vous appuyez sur la touche Espace, un espace est ajouté au début.
  • ...

Ceci est mon code:

this.myTextField.setOnKeyPressed((KeyEvent event) -> { 
    shortcut = event.getCode(); 
    myTextField.setText(shortcut.getName()); 
}); 
  • raccourci est un CodeTouche
  • myTextField est un TextField

Merci pour les réponses!

+0

Pourriez-vous simplement saisir la touche enfoncée et effacer le 'TextField'? – Sedrick

+0

Ou peut-être utiliser quelque chose comme [this] (http://fxexperience.com/2012/02/restricting-input-on-a-textfield/). De cette façon, vous pouvez saisir le texte, mais rendre tout le texte invalide. Il suffit ensuite de définir le texte 'TextField' sur une chaîne vide. – Sedrick

+0

Je crois que l'ajout de contraintes ne serait pas une bonne solution, car la touche Delete continuerait de supprimer la première lettre. En ce qui concerne l'option pour effacer le contenu de TextField, je l'ai même essayé, mais il semble que le thread qui change le contenu d'un TextField soit appelé après l'appel de mon événement, donc même en effaçant le contenu et en en insérant un nouveau, TextField changements après. –

Répondre

0

Eh bien ... Je ai trouvé une solution, et il est très simple.

J'ai seulement changé TextField à un bouton. Oui, c'est tout (avec un peu de CSS, bien sûr).

Le bouton a les mêmes événements et il a la possibilité de définir un texte. C'est tout ce dont j'avais besoin.

+0

Alors que votre solution peut fonctionner, je ne recommanderais pas de prendre l'habitude de solutions de contournement alambiquées comme ça. Une solution beaucoup mieux serait d'écouter juste pour la frappe, puis effacer le TextField. – Zephyr

+0

J'ai essayé d'effacer le TextField, mais les threads Java modifient le contenu de l'objet après l'exécution de mon événement. –

+0

En outre, les seuls changements dans mon code étaient la déclaration de l'objet, dans lequel je suis passé de TextField à Button, et le getter et le setter de celui-ci. –

0

Utilisation setOnKeyReleased au lieu de setOnKeyPressed méthode

textField.setOnKeyReleased(e -> { 
      KeyCode key = e.getCode(); 
      textField.setText(key.getName()); 
     }); 
+0

J'ai oublié de mentionner que j'utilise des touches de combinaison comme Ctrl + P, et cet événement onKeyReleased ne me laisse pas utiliser cela. De plus, il cache simplement le contenu après l'appel de l'événement, donc si l'utilisateur maintient une touche, comme le 'c', il continuera à apparaître "cC". TextFiel ne peut-il pas afficher ce qu'il tape? –