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

将要测量的字符串放在Text对象中。

获取Text对象的布局范围的宽度。

如果您需要应用CSS:

将要测量的字符串放在Text对象中。

创建一个一次性场景并将Text对象放置在场景中。

拍摄文本快照(如果您使用的是Java 7),或者为Java 8 调用applyCss。

获取Text对象的布局范围的宽度。

之所以可行,是因为它会强制在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);

}

}

java 字符串像素_如何在JavaFX中计算字符串的像素宽度?相关推荐

  1. scala字符串替换_如何在Scala中替换字符串中的正则表达式模式?

    scala字符串替换 Scala | 替换字符串中的正则表达式模式 (Scala | Replacing a regular expression pattern in a string) Repla ...

  2. python字符串筛选输出_如何在Python中过滤字符串列表

    Python使用列表数据类型在顺序索引中存储多个数据.它的工作方式类似于其他编程语言的数字数组.filter()方法是Python的一种非常有用的方法.可以使用filter()方法从Python中的任 ...

  3. php根据字符串分割字符串_如何在PHP中按字符串分割字符串?

    php根据字符串分割字符串 How to split a string by string in PHP? For example, 如何在PHP中按字符串分割 字符串 ? 例如, "a s ...

  4. 切割字符串长度php,C++_C语言中计算字符串长度与分割字符串的方法,C语言strlen()函数:返回字符串 - phpStudy...

    C语言中计算字符串长度与分割字符串的方法 C语言strlen()函数:返回字符串的长度头文件: #include strlen()函数用来计算字符串的长度,其原型为: unsigned int str ...

  5. java+script+当前日期_如何在JavaScript中获取当前日期?

    如何在JavaScript中获取当前日期? #1楼 您可以使用扩展了 Date对象的Date.js库,从而可以使用.today()方法. #2楼 如果您想对日期格式进行更多的粒度控制,我强烈建议您查看 ...

  6. java jcombobox长度_如何在JToolBar中设定JComboBox的大小?

    如何在JToolBar中设定JComboBox的大小? 我设计了一个JToolBar,并且在上边添加了一个JComboBox,可是我发现这个JComboBox长度无法控制,它将JToolBar上剩余空 ...

  7. mysql中转换成字符串_如何在R中转换字符串的大小写?

    mysql中转换成字符串 Hello, folks. In this tutorial we are going to convert the case of the string in R. The ...

  8. golang 格式化字符串_如何在Go中格式化字符串

    golang 格式化字符串 As strings are often made up of written text, there are many instances when we may wan ...

  9. python格式化字符串语法_详解Python3 中的字符串格式化语法

    一.旧式的字符串格式化 % 操作符 参考以下示例: >>> name = "Eric" >>> "Hello, %s." % ...

  10. mysql节假日函数_如何在MySQL中计算不包括周末和节假日的日期差

    我需要计算两个日期之间的天数(工作日),不包括周末(最重要)和假期 SELECT DATEDIFF(end_date, start_date) from accounts 但是,我不知道该如何在MyS ...

最新文章

  1. 解决ubuntu14.04下Qt 5.3.1下的QtCreator fcitx,ibus不能输入中文
  2. PhpCms V9调用指定栏目子栏目文章的方法
  3. #.NET分别以GET和POST方式抓取远程页面
  4. Transformer温故知新
  5. 性能测试工具curl-loader(linux)
  6. ubuntu16.04 安装docker-ce,解决libltdl7版本过低的问题
  7. 动态代理,动态代理设计模式 ,JDK动态代理,cglib动态代理
  8. 文带你深入了解 Redis 内存模型
  9. 离婚从来不是解决家庭危机的唯一办法
  10. NGINX和NGINX Plus的速率限制
  11. 腾讯又“撒钱”了!奖励2.28万员工800万股,人均16.6万港元 网友:福利界天花板...
  12. java案例代码17--正则表达式小案例
  13. php imagick下载,PHP安装imagemagick扩展imagick
  14. 【SpringBoot_ANNOTATIONS】自动装配 04 Aware 注入Spring底层组件 原理
  15. Win10系统定时开关机
  16. 大数据笔试面试题(转载)
  17. 看黑马程序员视频学习之节点操作之复制节点
  18. 英特尔核显自定义分辨率_英特尔核芯显卡设置如何操作【图文】
  19. 华为云服务器怎么备份文件,云服务器系统如何备份文件
  20. JS实现多张图片绕中心点转动

热门文章

  1. 重庆金域 :新系统成功上线!重庆金域第一份新系统的报告单2017年9月21日13:00正式发出
  2. Connectionist Text Proposal Network
  3. 厦大C语言上机 1360 算日期
  4. 40款用于简洁网页设计的光滑英文字体【上】
  5. 【Python】正则表达式判断是否存在连续N个字母
  6. 大陆、港澳台身份证、护照、军官证的正则表达式
  7. 数据仓库(三)之架构篇
  8. HTML期末作业-我的家乡网页作业
  9. PHP 毕生功力 图片,视听发烧网_汇集毕生功力的代表作:静神Monitor Acoustics KenStyle Silver Signature...
  10. Unity不规则碰撞