栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在JavaFX中计算字符串的像素宽度?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在JavaFX中计算字符串的像素宽度?

如果仅在不使用CSS的情况下测量默认字体,请执行以下操作:

  1. 将要测量的字符串放在Text对象中。
  2. 获取Text对象的布局范围的宽度。

如果你需要应用CSS:

  1. 将要测量的字符串放在Text对象中。
  2. 创建一个一次性场景并将Text对象放置在场景中。
  3. 拍摄文本快照(如果使用的是Java 7),或者为Java 8 调用applyCss。
  4. 获取Text对象的布局范围的宽度。
    之所以有效,是因为它会强制对文本进行布局传递,以计算其布局范围。步骤2中的场景是必需的,因为这只是CSS处理器的工作方式(它需要一个节点位于Scene中才能执行其工作)。如果你想进一步了解处理过程,请绝对阅读适用于applyCss的链接Javadoc。

样例代码

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();  }}

示例程序输出(显示任意文本的宽度,以像素为单位):

如果将文本以设置的字体打印到图形上下文中,这将如何(如果有的话)发生变化?

将字体应用于包含与绘图相同的消息的文本对象。与测量在场景图上绘制的文本不同,在画布上绘制的项目没有应用CSS,因此在测量文本之前,无需将Text对象放置在场景中并对其应用CSS。你可以测量文本对象的布局范围,它与使用相同字体在画布中绘制的文本的范围相同。

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);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456669.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号