Wygląda na to, że nie ma połączenia API do obliczania szerokości (w pikselach) ciągu tekstowego w Java FX 2.2. Pojawiły się sugestie obejścia na innych forach, ale moje wysiłki w celu utworzenia lub znalezienia dowolnego kodu, który zwraca szerokość ciągu, przy użyciu domyślnej czcionki lub innej, nie powiodły się. Każda pomoc będzie doceniona.Jak obliczyć szerokość piksela w języku JavaFX?
Odpowiedz
Jeśli tylko pomiar domyślną czcionkę bez CSS:
- miejsce napisu należy mierzyć w obiekcie tekstowym.
- Uzyskaj szerokość granic układu obiektu Tekst.
Jeśli trzeba zastosować CSS:
- Umieść String być mierzony w obiekcie tekstowym.
- Utwórz rzutowaną scenę i umieść obiekt Tekst w scenie.
- Zrób migawkę tekstu (jeśli korzystasz z Java 7) lub zadzwoń pod numer applyCss dla języka Java 8.
- Uzyskaj szerokość granic układu obiektu Tekst.
Działa, ponieważ wymusza przejście układu na tekście, który oblicza jego ograniczenia. Scena w kroku 2 jest wymagana, ponieważ tak działa procesor CSS (potrzebuje węzła, który będzie umiejscowiony w scenie, aby móc wykonać to zadanie). Zdecydowanie przeczytaj połączone javadoc dla applyCss, jeśli chcesz dalej zrozumieć przetwarzanie.
Przykładowy kod
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.text.Text;
import javafx.stage.Stage;
// displays the width in pixels of an arbitrary piece of text.
public class MeasureText extends Application {
public static void main(String[] args) { launch(args); }
@Override public void start(Stage stage) throws Exception {
final Text text = new Text("XYZZY");
new Scene(new Group(text));
// java 7 =>
// text.snapshot(null, null);
// java 8 =>
text.applyCss();
final double width = text.getLayoutBounds().getWidth();
stage.setScene(new Scene(new Label(Double.toString(width))));
stage.show();
}
}
wyjście Przykładowy program (wyświetla szerokość w pikselach dowolnego fragmentu tekstu):
Jak (jeśli w ogóle) będzie ta zmiana, jeśli tekst został wydrukowany w tekście graficznym z ustawioną czcionką?
Zastosuj czcionkę do obiektu tekstowego zawierającego tę samą wiadomość, którą wydrukujesz na płótnie. W przeciwieństwie do pomiaru tekstu naniesionego na wykres sceny, elementy naniesione na płótno nie mają nałożonych na nie CSS, więc nie trzeba umieszczać obiektu Tekst w scenie i stosować CSS przed pomiarem tekstu. Możesz zmierzyć granice układu obiektu tekstowego i będzie on taki sam jak granice tekstu drukowanego w obszarze roboczym z tą samą czcionką.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.*;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.text.*;
import javafx.stage.Stage;
// displays the width in pixels of an arbitrary piece of text (which has been plotted on a canvas).
public class MeasureText extends Application {
@Override
public void start(Stage stage) throws Exception {
final String msg = "XYZZY";
final Text text = new Text(msg);
Font font = Font.font("Arial", 20);
text.setFont(font);
final double width = text.getLayoutBounds().getWidth();
Canvas canvas = new Canvas(200, 50);
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFont(font);
gc.fillText(msg, 0, 40);
stage.setScene(new Scene(
new VBox(new Label(Double.toString(width)), canvas))
);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Co o tym:
float width = com.sun.javafx.tk.Toolkit.getToolkit().getFontLoader().computeStringWidth("", gc.getFont());
float height = com.sun.javafx.tk.Toolkit.getToolkit().getFontLoader().getFontMetrics(gc.getFont()).getLineHeight();
Próbowałem to:
Text theText = new Text(theLabel.getText());
theText.setFont(theLabel.getFont());
double width = theText.getBoundsInLocal().getWidth();
i wydaje się, że działa poprawnie.
- 1. Szerokość piksela w postaci jednobarwnej
- 2. Jak obliczyć szerokość czcionki?
- 3. Jak obliczyć optymalną szerokość tytułu?
- 4. Jak obliczyć szerokość łańcucha w pikselach?
- 5. Jak obliczyć szerokość łańcucha w iText?
- 6. Szerokość piksela za pomocą glPointSize - brak efektu
- 7. JavaFX TextArea: jak ustawić szerokość tabulacji
- 8. Jak zrobić PdfPTable dynamicznie obliczyć szerokość kolumny
- 9. Jak obliczyć szerokość między dwoma elementami?
- 10. Jak zachować szerokość piksela QPen taką samą przy powiększaniu QGraphicsView
- 11. Jak zmienić kolor piksela obrazu w języku C# .NET
- 12. C#: Szerokość pasującego piksela tekstu renderowanego w przeglądarce
- 13. Przełączanie między panelami w języku JavaFX
- 14. Oblicz szerokość wyświetlania ciągu znaków w języku Java
- 15. Jak obliczyć szerokość ciągu tekstowego określonej czcionki i rozmiaru czcionki?
- 16. Jak obliczyć wysokość i szerokość izometrycznego prostokąta/kwadratu
- 17. Jak obliczyć szerokość UILabel na podstawie długości tekstu?
- 18. Jak uzyskać lub obliczyć szerokość/wysokość nadmuchanego widoku?
- 19. CSS3 jak obliczyć wysokość i szerokość po skali
- 20. Ustaw wysokość i szerokość sceny i sceny w javafx
- 21. Jak znaleźć szerokość struny w języku C# (w pikselach)
- 22. Jak powiązać właściwość z stylem szerokości piksela w Angular 2?
- 23. Jak odczytać kolor piksela ekranu
- 24. Jak uzyskać kolor piksela w UIView?
- 25. Obliczyć pozycję piksela X, Y na gradiencie w oparciu o kolor szesnastkowy za pomocą Javascriptu
- 26. Jak ustawić/usunąć wypustki w JavaFX TitledPane
- 27. Sterowanie tabelą z przesuwanymi nagłówkami wierszy w języku JavaFX
- 28. Jak obliczyć średnią ważoną w R?
- 29. Uzyskaj kolor piksela UIImage
- 30. Jak obliczyć wartości procentowe w LESS CSS?
to narzędzie oblicza szerokość łańcucha zgodnie z systemem operacyjnym, który działa, jeśli chcę obliczyć szerokość tekstu w systemach Windows i Mac OX? –
Tak, zostanie zwrócona prawidłowa szerokość, niezależnie od używanego systemu operacyjnego. – jewelsea
Czy to rozwiązanie będzie również uwzględniało stylizowany tekst, jeśli styl zostanie zastosowany do tekstu przed zrobieniem migawki? – Brendan