Comment obtenir de l'étiquette.getWidth() en javafx
toujours quand j'essaie d'avoir de la largeur d'un Tableau en Java, elle retourne 0 et je ne sais pas pourquoi. Quelqu'un peut-il m'expliquer comment c'est fait?
Label label = new Label();
label.setFont(Font.font(label.getFont().getFamily(), 8));
label.setText(""
+ a[i][j].getList().getFirst().getLength()
+ " mal "
+ intToColor(a[i][j].getList().getFirst()
.getColor()));
label.relocate((x1 + x2) / 2 - label.getWidth() / 2, (y1 + y2) / 2);
label.idProperty().set("trackName");
label.setTextFill(Color.web("GREEN"));
field.getChildren().addAll(path, label);
System.out.println(label.getLayoutBounds().getWidth());
System.out.println(label.getWidth());//... also i tested a lot of different getters but i couldn't get the label width (same problem with height)
Espère que vous avez une idée de ce que j'ai à faire.
@tomsontom
fait:
label.prefWidth(-1);
label.prefHeight(-1);
label.impl_processCSS(true);
// label.resizeRelocate(x, y, width, height);
System.out.println(label.getWidth());
mais il n'a pas fonctionné - pouvez-vous m'expliquer plus précisément ce que je dois faire?
OriginalL'auteur baxbear | 2014-01-12
Vous devez vous connecter pour publier un commentaire.
Pour obtenir la largeur, vous devez appeler prefWidth(-1) et prefHeight(-1) la mise en page des limites sont définis uniquement une fois que le contrôle est relooké par resizeRelocate
Pour obtenir la bonne largeur de l'avant de la scène est indiqué vous devez également appeler impl_processCSS(vrai), qui est une AUCUNE API publique, mais il n'y a rien de mieux à l'heure actuelle IIRC
J'ai ajouté le code à ma réponse
merci beaucoup
Merci, je n'ai pas besoin de l'obsolète .impl_processCSS() appel cependant prefWidth(-1) m'a donné la bonne valeur de la largeur alors que getWidth() n'a pas. Cheers
Vous pouvez utiliser l'étiquette.applyCss(); au lieu de l.impl_processCSS(true); Cela fonctionne pour moi avec l'.prefWidth(-1). Merci!
OriginalL'auteur tomsontom
Une autre approche consiste à calculer la chaîne largeur de l'étiquette du textProperty à l'aide de
Fontloader.computeStringWidth(text, font)
qui serait sortie de la largeur en pixels de l'étiquette du textProperty, et est assez similaire à l'obtention largeur de l'étiquette lorsque l'étiquette est relooké à la partie postérieure.Pour une instance:
La sortie est:
À tester:
Voici la sortie
Comparable, ils sont les mêmes. Espérons que cette aide.
OriginalL'auteur Warren M. Nocos
Je ne pense pas que la largeur sera calculé jusqu'à ce que l'Étiquette est indiqué: ajouter à un Parent qui est visible et vous devriez obtenir un résultat non nul.
Je ne le pense pas - imaginez que vous placez votre étiquette dans un AnchorPane avec les contraintes que l'étiquette remplit l'ensemble de la région - la taille dépendra de la taille de la AnchorPane, qui dépendra probablement de la taille de son conteneur etc. Donc la taille visible de votre Étiquette dépend comment et où il doit être démontré, ce qui n'est pas disponible jusqu'à ce qu'il devienne visible.
Vous devez expliquer la raison pour laquelle vous avez besoin de connaître la taille - il peut y avoir une meilleure façon.
la raison en est: $label.déménager((x1 + x2) / 2 - étiquette.getWidth() / 2, (y1 + y2) / 2);$ je veux placer mon label centrée sur l'abscisse.
Vous pouvez le faire une fois que l'Étiquette est visible. Sinon, vous pouvez peut-être utiliser un récipient approprié. Par exemple, vous pouvez pas utiliser un GridPane et centre les étiquettes dans les cellules de la grille avec des contraintes au lieu de calculer les positions manuellement?
OriginalL'auteur assylias
Vous pouvez essayer ce qui suit:
Les travaux de cette. Le seul malheureux, c'est que cette mise à jour une fois qu'il est montré, de sorte que vous pouvez voir quoi que ce soit dans le
runLater()
appliquer, comme il arrive.OriginalL'auteur ihayet