Je suis un ListView
dans mon JavaFX App, où je mis en place un moteur de rendu de cellule personnalisée comme suit:JavaFX ListView: custom police pas appliquée correctement
myListView.setCellFactory((params) -> new MyListRenderer());
La classe renderer:
class MyListRenderer extends ListCell<MyItemClass> {
private final Label text;
MyListRenderer() {
text = new Label();
text.setFont(Font.font("Monospaced", 12));
}
@Override
protected void updateItem(MyItemClass item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setGraphic(null);
setText(null);
} else {
if(item.isSpecialItem()){
text.setText("\u25B6 " + item.getString();
text.setStyle("-fx-font-weight: bold;");
} else {
text.setText(item.getString());
text.setStyle("-fx-font-weight: normal;");
}
setGraphic(text);
}
}
}
Comme vous pouvez voir que j'ai mis la police à Monospaced, et aussi j'ai mis le texte et le style selon un drapeau de mes articles ('isSpecialItem')
Ainsi, cela fonctionne bien au début, quand j'ajoute les sapins quelques entrées sont correctement affichées. Cependant, dès que je sélectionne une entrée dans la liste, la police de mon étiquette de texte est réinitialisée à la police par défaut des cellules de la liste. Il est intéressant de noter que seule la police semble être réinitialisée, car le texte que j'ai défini ainsi que le style (gras ou normal) sont toujours correctement appliqués.
J'ai essayé de mettre cette ligne:
text.setFont(Font.font("Monospaced", 12));
dans la méthode updateItem
, afin qu'il soit à nouveau exécuté sur chaque mise à jour. Cependant, cela ne fonctionne toujours pas, car j'ai remarqué que la méthode n'est même pas appelée lorsque je sélectionne des éléments. Le problème est finalement le suivant: Lors de la sélection dans la vue liste, la police est réinitialisée pour une raison quelconque, et la méthode updateItem
n'est même pas rappelée, donc je ne peux pas la remettre à la police désirée.
Quelqu'un sait ce qui se passe ici et comment je peux le réparer?
Merci
mais ne change-t-il pas alors toutes les listes dans mon application? Malheureusement, je n'ai pas utilisé de CSS jusqu'à présent avec JavaFX, pouvez-vous me donner un exemple de la façon dont je peux configurer ceci pour cette seule liste (que j'ai définie dans un fichier fxml) – user3237736
Vérifiez la réponse. – MBec