JavaFx 自制厘米尺标尺
背景描述
在使用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 自制厘米尺标尺相关推荐
- (更新文件啦!)自制PCB尺总结(在PCB中加入LOGO的最简单方法)
---请按需自取--- 一.写在前面 二.PCB的层和结构 2.1 普通双层板(下表排列为实际顺序) 2.2 机械层 三.PCB画等距线方法(如何画好刻度线) 3.1分步操作流程 3.2整体操作GIF ...
- ADC实验(读取引脚电压值)
目录 ADC 简介 什么是ADC I.MX6ULL ADC 简介 ADC寄存器介绍 配置步骤 硬件原理分析 实验程序编写 编译下载验证 编写Makefile 和链接脚本 编译下载 ADC 是一种常见的 ...
- 计算机网络 第三章 数据链路层
有一说一,王道的计算机网络个人感觉不尽如意,数据链路层的内容安排实在是有些乱,里面并不是按照课本来的,而是穿插了很多其它章节的知识. 3.1 数据链路层的功能 数据链路层在物理层提供服务的基础上,向网 ...
- C# wpf 使用ListBox实现尺子控件
文章目录 前言 一.如何实现? 1.设置横向ListBox 2.Item设为刻度样式 3.绑定数据源 二.完整代码 三.效果预览 总结 前言 尺子在客户端开发中有一定的应用场景,比如厘米尺.白板的画线 ...
- 《Delphi程序开发范例宝典(第3版)》.(明日科技).[PDF]ckook
为什么80%的码农都做不了架构师?>>> 图书作者: 明日科技 图书编号: 9787115277589 图书格式: PDF 出 版 社: 人民邮电出版社 出版年份: 2012 ...
- IGKBoard(imx6ull)-ADC编程MQ-2烟雾传感器采样
文章目录 1- ADC介绍 2- MQ-2烟雾传感器介绍 (1)工作原理 (2)MQ-2应用电路 3- MQ-2烟雾传感器硬件连接 4- ADC驱动配置 5- 编程查看当前浓度 1- ADC介绍 AD ...
- 043_《Delphi程序开发范例宝典(第2版)》
<Delphi程序开发范例宝典(第2版)> Delphi 教程 系列书籍 (043) <Delphi程序开发范例宝典(第2版)> 网友(邦)整理 EMail: shuaihj@ ...
- 计算机和角谷猜想的作文,数学童话日记
童话 数学 日记 童话故事作文 女教师日记 篇一:二年级数学日记的写法 低年级学生写数学日记的实践和探索 张店区科苑小学 徐振江 <数学课程标准>指出:"数学是人类的一种文化,它 ...
- 一尺、一英尺、一寸和一英寸分别等于多少厘米?
1米 = 3尺 , 1尺=10寸 (1尺=33.33厘米,1寸=3.333厘米) 英寸(inch,缩写为in.)在荷兰语中的本意是大拇指,一英寸就是一节大拇指的长度.当然人的大拇指的长度也是长短不一的 ...
- 在Word中巧改厘米标尺(转)
在Word中巧改厘米标尺(转) 在Word中,窗口默认标尺为2.4.6--38,这一数字表示什么意思呢?采用的单位是厘米?英寸?磅?其实都不是.它是以字符为单位的,也就是说在"宋体" ...
最新文章
- php 剩余空间,PHP内核探索:内存的申请与销毁
- 【NLP】向量检索模型落地:瓶颈及解法!
- 开发java程序的步骤_开发 Java 程序的一般步骤是:源程序编辑、 和 。_学小易找答案...
- NRedis-Proxy - 高性能中间件服务器
- 在 Xunit 中使用依赖注入
- 一步步编写操作系统 11 实模式下程序分段的原因
- 防御sql和xss的php代码,PHP防XSS 防SQL注入的代码
- 【LeetCode】剑指 Offer 16. 数值的整数次方
- Linux学习——gcc编译C程序
- 最新版最简单SPSS 26安装详细教程
- html5获取手机屏幕大小写,html图片自适应手机屏幕大小的css写法
- hibernate的注解属性mappedBy详解
- 数据库ASM管理-ASM文件
- 网站建设对企业的好处有哪些?
- “我玩某宝第1年,还清所有欠款”:会挣钱的人,都活成什么样 ?
- 谈谈对springioc的理解
- 自签 https 证书
- C++ 命令行CMD 的控制与源代码
- ABAP其他基本语法
- 生鲜配送系统有哪些功能?搭建生鲜配送系统有什么优势?