Wie man label.getWidth() in javafx
immer wenn ich versuche die Breite eines Arrays in Java es gibt nur 0 und ich weiß nicht, warum. Kann jemand mir erklären, wie es richtig gemacht wird?
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)
Hoffe, du hast eine Idee, was ich zu tun habe.
@tomsontom
Tat dies:
label.prefWidth(-1);
label.prefHeight(-1);
label.impl_processCSS(true);
// label.resizeRelocate(x, y, width, height);
System.out.println(label.getWidth());
aber es hat nicht funktioniert, erklären Sie mir genauer, was ich tun muss?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um die Breite, die Sie benötigen, rufen Sie prefWidth(-1) und prefHeight(-1) die layout-Grenzen sind nur gesetzt, wenn die Steuerung wird gelayoutet durch resizeRelocate
Um die richtige Breite vor der Bühne dargestellt, müssen Sie auch nennen impl_processCSS(wahr), die einem KEINE öffentliche API, aber es gibt nichts besseres im moment IIRC
Ein weiterer Ansatz ist die Berechnung der string-Breite des Etiketts textProperty mit
Fontloader.computeStringWidth(text, font)
würde die Ausgabe der pixel-Breite des Etiketts textProperty, und ist stark ähnelt, immer die label-Breite, wenn das label ist gelayoutet auf den späteren Teil.Für eine Instanz:
Ausgabe:
Test:
Hier ist die Ausgabe
Vergleichbar, Sie sind die gleichen. Hoffe, das hilft.
Ich glaube nicht, dass die Breite wird berechnet, bis die Bezeichnung angezeigt: fügen Sie es ein Elternteil, das sichtbar ist, und Sie sollten eine nicht-null-Ergebnis.
Können Sie Folgendes versuchen:
runLater()
gelten, wie es geschieht.