背景描述

在使用word办公软件的时候,我们会见到标尺,因为在文件导出打印的时候,可能会有很苛刻的要求,有了标尺,用户能够更直观的设计使用word。

功能摘要

在使用JavaFx开发的时候,不能调用Slider来当标尺使用,当然网上关于JavaFx的资源比较匮乏,这里我也是参考了网上的一点思路,自制了一个标尺厘米尺,使用画图的方式,在Group组件里画图完成的,因为这是要根据屏幕的dpi去计算英寸,从而得到厘米来展示的。

使用公式

像素与英寸之间的关系:

像素单位=英寸 * dpi

英寸与厘米之间的关系:

1英寸=2.54厘米

代码实现

import javafx.scene.Group;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Screen;/*** @author Fellon* TODO 标尺工具类,制作厘米的垂直标尺和水平标尺 2020/12/2*/
public class RulerUtil {/***************************************************************** TODO 像素单位=(厘米*dpi)/2.54********************************************************************************************************************************/public static final int RULER_WIDTH = 20; // 标尺宽度public static final String FONT_FAMILY = "Microsoft YaHei"; // 字体样式public static final int FONT_SIZE = 10; // 字体的大小public static final int TEXT_LAYOUT = 10; // 文本距边界的位置public static final double SCALE = 2.54; // 1英寸=2.54厘米public static final int GAP = 50; // 容器内的边距产生的误差,防止宽高一直在变化/*** TODO 水平方向上的标尺* @param groupHRuler*/public void makeHorizontalRuler(Group groupHRuler, double width) {width = width - GAP;Rectangle ruler = new Rectangle(0, 0, width, RULER_WIDTH);ruler.setFill(Color.WHITE);ruler.toBack();groupHRuler.getChildren().add(ruler);// 计算宽度共有多少厘米double sceneDPI = this.getSceneDPI();int widthCM = new Double(width / sceneDPI * SCALE).intValue();for (int i = 0; i < widthCM * 2; i ++) {// 如果为整厘米上if (i % 2 == 0) {// 添加文字Text text = new Text(String.format("%3d", i / 2));text.setLayoutX(this.calcPxByCm(i / 2.0));text.setLayoutY(TEXT_LAYOUT);text.toFront();this.setFontAndColor(text);groupHRuler.getChildren().add(text);// 绘制 线Line line = new Line();line.setStartX(this.calcPxByCm(i / 2.0));line.setEndX(this.calcPxByCm(i / 2.0));line.setStartY(6);line.setEndY(18);line.setFill(Color.BLACK);line.toFront();groupHRuler.getChildren().add(line);} else {Line line = new Line();line.setStartX(this.calcPxByCm(i / 2.0));line.setEndX(this.calcPxByCm(i / 2.0));line.setStartY(12);line.setEndY(18);line.setFill(Color.BLACK);line.toFront();groupHRuler.getChildren().add(line);}}}/*** TODO 垂直方向上的标尺* @param groupVRuler*/public void makeVerticalRuler(Group groupVRuler, double height) {height = height - GAP;Rectangle ruler = new Rectangle(0, 0, RULER_WIDTH, height);ruler.setFill(Color.WHITE);ruler.toBack();groupVRuler.getChildren().add(ruler);// 计算高度共有多少厘米double sceneDPI = this.getSceneDPI();int heightCM = new Double(height / sceneDPI * 2.54).intValue();for (int i = 0; i < heightCM * 2; i ++) {if (i % 2 == 0) {// 添加文字Text text = new Text(String.format("%3d", i / 2));text.setLayoutX(2);text.setLayoutY(this.calcPxByCm(i / 2.0) + 10);text.toFront();this.setFontAndColor(text);groupVRuler.getChildren().add(text);// 绘制 线Line line = new Line();line.setStartX(6);line.setEndX(18);line.setStartY(this.calcPxByCm(i / 2.0));line.setEndY(this.calcPxByCm(i / 2.0));line.setFill(Color.BLACK);line.toFront();groupVRuler.getChildren().add(line);} else {Line line = new Line();line.setStartX(12);line.setEndX(18);line.setStartY(this.calcPxByCm(i / 2.0));line.setEndY(this.calcPxByCm(i / 2.0));line.setFill(Color.BLACK);line.toFront();groupVRuler.getChildren().add(line);}}}/*** TODO 设置字体的样式大小及颜色* @param text*/private void setFontAndColor(Text text) {text.setFont(Font.font(FONT_FAMILY, FONT_SIZE));text.setFill(Color.BLACK);}private double calcPxByCm(double x) {return x * this.getSceneDPI() / SCALE;}private double getSceneDPI() {return Screen.getPrimary().getDpi();}
}

JavaFx 自制厘米尺标尺相关推荐

  1. (更新文件啦!)自制PCB尺总结(在PCB中加入LOGO的最简单方法)

    ---请按需自取--- 一.写在前面 二.PCB的层和结构 2.1 普通双层板(下表排列为实际顺序) 2.2 机械层 三.PCB画等距线方法(如何画好刻度线) 3.1分步操作流程 3.2整体操作GIF ...

  2. ADC实验(读取引脚电压值)

    目录 ADC 简介 什么是ADC I.MX6ULL ADC 简介 ADC寄存器介绍 配置步骤 硬件原理分析 实验程序编写 编译下载验证 编写Makefile 和链接脚本 编译下载 ADC 是一种常见的 ...

  3. 计算机网络 第三章 数据链路层

    有一说一,王道的计算机网络个人感觉不尽如意,数据链路层的内容安排实在是有些乱,里面并不是按照课本来的,而是穿插了很多其它章节的知识. 3.1 数据链路层的功能 数据链路层在物理层提供服务的基础上,向网 ...

  4. C# wpf 使用ListBox实现尺子控件

    文章目录 前言 一.如何实现? 1.设置横向ListBox 2.Item设为刻度样式 3.绑定数据源 二.完整代码 三.效果预览 总结 前言 尺子在客户端开发中有一定的应用场景,比如厘米尺.白板的画线 ...

  5. 《Delphi程序开发范例宝典(第3版)》.(明日科技).[PDF]ckook

    为什么80%的码农都做不了架构师?>>>    图书作者: 明日科技 图书编号: 9787115277589 图书格式: PDF 出 版 社: 人民邮电出版社 出版年份: 2012 ...

  6. IGKBoard(imx6ull)-ADC编程MQ-2烟雾传感器采样

    文章目录 1- ADC介绍 2- MQ-2烟雾传感器介绍 (1)工作原理 (2)MQ-2应用电路 3- MQ-2烟雾传感器硬件连接 4- ADC驱动配置 5- 编程查看当前浓度 1- ADC介绍 AD ...

  7. 043_《Delphi程序开发范例宝典(第2版)》

    <Delphi程序开发范例宝典(第2版)> Delphi 教程 系列书籍 (043) <Delphi程序开发范例宝典(第2版)> 网友(邦)整理 EMail: shuaihj@ ...

  8. 计算机和角谷猜想的作文,数学童话日记

    童话 数学 日记 童话故事作文 女教师日记 篇一:二年级数学日记的写法 低年级学生写数学日记的实践和探索 张店区科苑小学 徐振江 <数学课程标准>指出:"数学是人类的一种文化,它 ...

  9. 一尺、一英尺、一寸和一英寸分别等于多少厘米?

    1米 = 3尺 , 1尺=10寸 (1尺=33.33厘米,1寸=3.333厘米) 英寸(inch,缩写为in.)在荷兰语中的本意是大拇指,一英寸就是一节大拇指的长度.当然人的大拇指的长度也是长短不一的 ...

  10. 在Word中巧改厘米标尺(转)

    在Word中巧改厘米标尺(转) 在Word中,窗口默认标尺为2.4.6--38,这一数字表示什么意思呢?采用的单位是厘米?英寸?磅?其实都不是.它是以字符为单位的,也就是说在"宋体" ...

最新文章

  1. php 剩余空间,PHP内核探索:内存的申请与销毁
  2. 【NLP】向量检索模型落地:瓶颈及解法!
  3. 开发java程序的步骤_开发 Java 程序的一般步骤是:源程序编辑、 和 。_学小易找答案...
  4. NRedis-Proxy - 高性能中间件服务器
  5. 在 Xunit 中使用依赖注入
  6. 一步步编写操作系统 11 实模式下程序分段的原因
  7. 防御sql和xss的php代码,PHP防XSS 防SQL注入的代码
  8. 【LeetCode】剑指 Offer 16. 数值的整数次方
  9. Linux学习——gcc编译C程序
  10. 最新版最简单SPSS 26安装详细教程
  11. html5获取手机屏幕大小写,html图片自适应手机屏幕大小的css写法
  12. hibernate的注解属性mappedBy详解
  13. 数据库ASM管理-ASM文件
  14. 网站建设对企业的好处有哪些?
  15. “我玩某宝第1年,还清所有欠款”:会挣钱的人,都活成什么样 ?
  16. 谈谈对springioc的理解
  17. 自签 https 证书
  18. C++ 命令行CMD 的控制与源代码
  19. ABAP其他基本语法
  20. 生鲜配送系统有哪些功能?搭建生鲜配送系统有什么优势?

热门文章

  1. mysql 如何去掉毫秒_MySQL 关于毫秒的处理-阿里云开发者社区
  2. 计算机更改刷新频率,电脑显示器刷新频率和分辨率怎么修改
  3. matlab雷达噪声模型,雷达信号处理MATLAB仿真.doc
  4. 软件测试常见Bug清单
  5. 小软件项目开发的管理
  6. JavaWeb源码网上商城系统a
  7. 使用Java和eclipse进行XML文件解析20180812_韩信之
  8. 做个聪明人,迅速提高你智商的22条途径
  9. 如何生成网站地图(Sitemap)
  10. Ubuntu 18.04安装i686-elf交叉编译工具链的方法