2 votes

Création d'un composant d'édition de texte personnalisé avec JavaFX

Je veux créer un composant d'édition de texte personnalisé. En fait, j'ai besoin d'un texte capable de définir un signe d'insertion et de gérer les événements liés aux touches d'une manière personnalisée. Existe-t-il un moyen de le faire en JavaFX ? Il existe des méthodes spécifiques d'implémentation sur le texte (qui sont dépréciées et les commentaires indiquent qu'elles doivent être considérées comme privées), mais je ne peux pas les utiliser.

Est-il possible de le faire en JavaFX ?

2voto

jewelsea Points 40435

Si vous utilisez un TextField ou un TextArea, ils sont tous les deux des sous-classes de TextInputControl . Le TextInputControl fournit un caretPositionProperty que vous pouvez utiliser pour lire et modifier la position du curseur. Tous les objets du graphique de scène (y compris TextField et TextArea) sont des instances de Nœud . Un nœud vous permet de définir des Gestionnaires d'événements y filtres d'événements . Vous pouvez utiliser un gestionnaire d'événements pour remplacer le gestionnaire de traitement des touches par défaut des commandes de saisie de texte afin de mettre en œuvre votre propre traitement.

Si vous avez besoin d'une capacité de personnalisation plus poussée, que vous ne pouvez pas obtenir en personnalisant une instance de TextField ou de TextArea, vous pouvez créer votre propre sous-classe TextInputControl et mettre en œuvre le composant d'édition de texte personnalisé dont vous avez besoin, mais je ne conseillerais pas vraiment cette approche en raison de la complexité et de la dépendance éventuelle à l'égard des apis JavaFX internes dont vous finiriez par avoir besoin.

TextField ne fonctionne pas pour moi car : 1. Il a une bordure qui indique le focus et que je ne sais pas comment enlever.

Voici un lien vers le feuille de style caspian.css par défaut pour JavaFX 2.2 . Vous pouvez définir le style de TextField pour supprimer la bordure de mise au point, en définissant le style de son sélecteur de pseudoclasse :focused sur les mêmes valeurs que son sélecteur par défaut. Par exemple :

.text-field:focused {
    -fx-background-color: -fx-shadow-highlight-color, -fx-text-box-border, -fx-control-inner-background;
    -fx-background-insets: 0, 1, 2;
    -fx-background-radius: 3, 2, 2;
}

Reportez-vous à la Guide de référence JavaFX css pour obtenir des informations sur l'utilisation de css dans JavaFX.

TextField ne fonctionne pas pour moi car : 2. Il a un nombre fixe de colonnes et j'ai besoin de changer la largeur dynamiquement.

TextField est un contrôle redimensionnable, si vous le placez dans un volet de mise en page redimensionnable avec des contraintes appropriées, il changera de largeur de façon dynamique. Le paramètre du nombre de colonnes dans TextField est un paramètre de type nombre de colonnes préférées et non un nombre fixe de colonnes.

Reportez-vous à la Documentation sur la mise en page JavaFX pour de plus amples informations sur la mise en page dans JavaFX.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X