原文地址http://download.oracle.com/javafx/2.0/ui_controls/editor.htm
HTMLEditor控件是一个全功能的富文本编辑器。除了基本编辑功能外,它还支持以下特性:
-
文本格式,包括粗体、斜体、下划线等等
-
段落设置,比如格式、字体、字号
-
前景和背景颜色
-
文本缩进
-
圆点和数字列表
-
文本对齐
-
添加水平标尺
-
复制和粘贴文本块
Figure 19-1 是一个JavaFX应用中的富文本编辑器。
Figure 19-1 HTML Editor
HTMLEditor
类呈现编辑内容使用的是HTML字符串形式,比如说,Figure 19-1 中的内容呈现以下字符串:"<html><head></head><body contenteditable="true"><h1>Heading</h1><div><u>Text</u>, some text</div></body></html>
."
由于HTMLEditor
类继承了Node
类,所以可以为它的实例应用视效和转换。
添加HTML Editor
和其他UI控件一样, HTMLEditor组件必须加入场景才能在应用中显示。可以像
Example 19-1 这样直接添加,或者通过布局容器。
Example 19-1 Adding an HTML Editor to a JavaFX Application
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.web.HTMLEditor; import javafx.stage.Stage; public class HTMLEditorSample extends Application { @Override public void start(Stage stage) { stage.setTitle("HTMLEditor Sample"); stage.setWidth(400); stage.setHeight(300); final HTMLEditor htmlEditor = new HTMLEditor(); htmlEditor.setPrefHeight(245); Scene scene = new Scene(htmlEditor); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } }
编译运行上面的代码效果是 Figure 19-2 .
Figure 19-2 Initial View of the HTMLEditor Component
![Description of Figure 19-2 follows Description of Figure 19-2 follows](http://download.oracle.com/javafx/2.0/ui_controls/img/editor-initial.png)
Description of "Figure 19-2 Initial View of the HTMLEditor Component"
实现该组件后就有格式栏,不能关闭它们。不过也可以使用CSS来改变其外观。见Example 19-2 .
Example 19-2 Styling the HTMLEditor
htmlEditor.setStyle( "-fx-font: 12 cambria;" + "-fx-border-color: brown; " + "-fx-border-style: dotted;" + "-fx-border-width: 2;" );
把它们加入到 Example 19-1 ,效果是Figure 19-3 .
Figure 19-3 Alternative View of the HTMLEditor Component
![Description of Figure 19-3 follows Description of Figure 19-3 follows](http://download.oracle.com/javafx/2.0/ui_controls/img/editor-cssstyle.png)
Description of "Figure 19-3 Alternative View of the HTMLEditor Component"
现在组件的边框和格式栏的字体改变了。
HTMLEditor
类提供了一个方法来定义应用启动后编辑区显示的内容。使用setHtmlText
方法来设置编辑器的初始文本,见Example 19-3。
Example 19-3 Setting the Text Content
private final String INITIAL_TEXT = "<html><body>Lorem ipsum dolor sit " + "amet, consectetur adipiscing elit. Nam tortor felis, pulvinar " + "in scelerisque cursus, pulvinar at ante. Nulla consequat" + "congue lectus in sodales. Nullam eu est a felis ornare " + "bibendum et nec tellus. Vivamus non metus tempus augue auctor " + "ornare. Duis pulvinar justo ac purus adipiscing pulvinar. " + "Integer congue faucibus dapibus. Integer id nisl ut elit " + "aliquam sagittis gravida eu dolor. Etiam sit amet ipsum " + "sem.</body></html>"; htmlEditor.setHtmlText(INITIAL_TEXT);
Figure 19-4 是使用setHTMLText
方法后的编辑器。
Figure 19-4 HTMLEditor with the Predefined Text Content
![Description of Figure 19-4 follows Description of Figure 19-4 follows](http://download.oracle.com/javafx/2.0/ui_controls/img/editor-text.png)
Description of "Figure 19-4 HTMLEditor with the Predefined Text Content"
可以在字符串中使用HTML标签来指定初始显示的文本格式。
用HTML Editor构建用户接口
能够使用
HTMLEditor
控件来实现典型的用户接口,比如说可以实现消息服务、email客户端、甚至内容管理系统。
下面实现一个消息排版窗口,在很多email客户端应用中都可以找到它。
Example 19-4 HTMLEditor Added to the Email Client UI
import javafx.application.Application; import javafx.collections.FXCollections; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.GridPane; import javafx.scene.layout.VBox; import javafx.scene.web.HTMLEditor; import javafx.stage.Stage; public class HTMLEditorSample extends Application { @Override public void start(Stage stage) { stage.setTitle("Message Composing"); stage.setWidth(500); stage.setHeight(500); Scene scene = new Scene(new Group()); final VBox root = new VBox(); root.setPadding(new Insets(8, 8, 8, 8)); root.setSpacing(5); root.setAlignment(Pos.BOTTOM_LEFT); final GridPane grid = new GridPane(); grid.setVgap(5); grid.setHgap(10); final ChoiceBox sendTo = new ChoiceBox(FXCollections.observableArrayList( "To:", "Cc:", "Bcc:") ); sendTo.setPrefWidth(100); GridPane.setConstraints(sendTo, 0, 0); grid.getChildren().add(sendTo); final TextField tbTo = new TextField(); tbTo.setPrefWidth(400); GridPane.setConstraints(tbTo, 1, 0); grid.getChildren().add(tbTo); final Label subjectLabel = new Label("Subject:"); GridPane.setConstraints(subjectLabel, 0, 1); grid.getChildren().add(subjectLabel); final TextField tbSubject = new TextField(); tbTo.setPrefWidth(400); GridPane.setConstraints(tbSubject, 1, 1); grid.getChildren().add(tbSubject); root.getChildren().add(grid); final HTMLEditor htmlEditor = new HTMLEditor(); htmlEditor.setPrefHeight(370); root.getChildren().addAll(htmlEditor, new Button("Send")); final Label htmlLabel = new Label(); htmlLabel.setWrapText(true); scene.setRoot(root); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } }
该接口包括一个选项框来选择接受类型,2个文本框来输入email地址和主题,一个标签来显示主题字段,一个编辑器,还有发送按钮。
使用Grid
和VBox布局容器把这些UI控件加入到应用的场景中。编译运行的效果见
Figure 19-5 ,这是一个用户正在排版周报。
调用setPrefWidth
或 setPrefHeight方法为
HTMLEditor对象设置宽或高
,当然根本不指定也行。Example 19-4 中为组件高度指定了值,而宽度由VBox悲剧容器控制了。当内容文本超出了编辑区的宽度和高度时,垂直滚动条就显示出来。
获取HTML内容
用JavaFX HTMLEditor控件,你可以编辑和设置初始内容。此外,你还可以以HTML格式获得输入的和编辑的内容。具体实现见
Example 19-5
Example 19-5 Retrieving HTML Code
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.scene.web.HTMLEditor;
import javafx.stage.Stage;
public class HTMLEditorSample extends Application {
private final String INITIAL_TEXT = "Lorem ipsum dolor sit "
+ "amet, consectetur adipiscing elit. Nam tortor felis, pulvinar "
+ "in scelerisque cursus, pulvinar at ante. Nulla consequat"
+ "congue lectus in sodales. Nullam eu est a felis ornare "
+ "bibendum et nec tellus. Vivamus non metus tempus augue auctor "
+ "ornare. Duis pulvinar justo ac purus adipiscing pulvinar. "
+ "Integer congue faucibus dapibus. Integer id nisl ut elit "
+ "aliquam sagittis gravida eu dolor. Etiam sit amet ipsum "
+ "sem.";
@Override
public void start(Stage stage) {
stage.setTitle("HTMLEditor Sample");
stage.setWidth(500);
stage.setHeight(500);
Scene scene = new Scene(new Group());
VBox root = new VBox();
root.setPadding(new Insets(8, 8, 8, 8));
root.setSpacing(5);
root.setAlignment(Pos.BOTTOM_LEFT);
final HTMLEditor htmlEditor = new HTMLEditor();
htmlEditor.setPrefHeight(245);
htmlEditor.setHtmlText(INITIAL_TEXT);
final TextArea htmlCode = new TextArea();
htmlCode.setWrapText(true);
ScrollPane scrollPane = new ScrollPane();
scrollPane.getStyleClass().add("noborder-scroll-pane");
scrollPane.setContent(htmlCode);
scrollPane.setFitToWidth(true);
scrollPane.setPrefHeight(180);
Button showHTMLButton = new Button("Produce HTML Code");
root.setAlignment(Pos.CENTER);
showHTMLButton.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent arg0) {
htmlCode.setText(htmlEditor.getHtmlText());
}
});
root.getChildren().addAll(htmlEditor, showHTMLButton, scrollPane);
scene.setRoot(root);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
getHTMLText方法获得了编辑内容并以HTML字符串形式呈现。该内容传递给文本区,这样就能查看、复制、粘贴这些HTML代码。
Figure 19-6 就是样例。
类似地,也可以获得HTML代码比in个保存为文件或者发送到WebView对象,以同步编辑器和绑定的浏览器中的内容。
下面实现了这个任务 Example 19-6 .
Example 19-6 Rendering Edited HTML Content in a Browser
import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.VBox; import javafx.scene.web.HTMLEditor; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; public class HTMLEditorSample extends Application { private final String INITIAL_TEXT = "Lorem ipsum dolor sit " + "amet, consectetur adipiscing elit. Nam tortor felis, pulvinar " + "in scelerisque cursus, pulvinar at ante. Nulla consequat" + "congue lectus in sodales. Nullam eu est a felis ornare " + "bibendum et nec tellus. Vivamus non metus tempus augue auctor " + "ornare. Duis pulvinar justo ac purus adipiscing pulvinar. " + "Integer congue faucibus dapibus. Integer id nisl ut elit " + "aliquam sagittis gravida eu dolor. Etiam sit amet ipsum " + "sem."; @Override public void start(Stage stage) { stage.setTitle("HTMLEditor Sample"); stage.setWidth(500); stage.setHeight(500); Scene scene = new Scene(new Group()); VBox root = new VBox(); root.setPadding(new Insets(8, 8, 8, 8)); root.setSpacing(5); root.setAlignment(Pos.BOTTOM_LEFT); final HTMLEditor htmlEditor = new HTMLEditor(); htmlEditor.setPrefHeight(245); htmlEditor.setHtmlText(INITIAL_TEXT); final WebView browser = new WebView(); final WebEngine webEngine = browser.getEngine(); ScrollPane scrollPane = new ScrollPane(); scrollPane.getStyleClass().add("noborder-scroll-pane"); scrollPane.setStyle("-fx-background-color: white"); scrollPane.setContent(browser); scrollPane.setFitToWidth(true); scrollPane.setPrefHeight(180); Button showHTMLButton = new Button("Load Content in Browser"); root.setAlignment(Pos.CENTER); showHTMLButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent arg0) { webEngine.loadContent(htmlEditor.getHtmlText()); } }); root.getChildren().addAll(htmlEditor, showHTMLButton, scrollPane); scene.setRoot(root); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } }
从htmlEditor
组件获得HTML代码加载到WebEngine
对象来指定绑定浏览器的内容。每次用户点击Load Content in Browser按钮,编辑的文本就更新到浏览器中。Figure 19-7 是Example 19-6 运行的效果。
使用Text
组件来添加非编辑文本内容。到Using Text and Text Effects in JavaFX 了解更多Text组件。
相关推荐
STM32G431支持的IF强拖与双DQ空间切换代码详解:包含转子预定位、升速恒速及iq下降阶段的闭环控制流程,STM32G431支持的IF强拖与双DQ空间切换代码:全流程解析及代码配置指南,基于stm32g431的if强拖 + 双dq空间切代码,有lunwen支持,主要包含以下流程: 1、转子预定位; 2、升速阶段; 3、恒速阶段; 4、iq下降阶段,准备切入闭环; 代码配置部分由cube生成,控制部分完全自己编写,注释详细 ,基于STM32G431的; IF强拖; 双DQ空间切换; 转子预定位; 升速阶段; 恒速阶段; IQ下降阶段; 注释详细。,基于STM32G431的IF强拖双DQ空间切换控制代码:全流程详解与注释
基于matlab平台的车牌识别GUI实现.zip
【毕业设计】基于Java的最短路径算法
java
基于Comsol超表面技术的折射率传感器研究:电磁诱导透明EIT与BIC的典型应用分析,"超表面折射率传感器技术与电磁诱导透明EIT及连续体中束缚态BIC的物理探索",Comsol超表面折射率传感器。 电磁诱导透明EIT和典型连续体中的束缚态BIC。 ,Comsol超表面; 折射率传感器; 电磁诱导透明EIT; 束缚态BIC,基于Comsol的超表面折射率传感器与EIT及BIC技术
遥感图像道路检测分割系统源码和数据集:改进yolo11-CARAFE
Web信息查询工具,可以查询whios信息、域名正向查询、IP反查
win32汇编环境,对线程的创建与操作示例二
第一篇 从正常使用“满血版”开始 DeepSeek火了,官网却几乎“半身不遂”,除第一次能正常访问外,其他访问次数都得看“运气”。下面提供几种替代性解决方案,虽不是百分百解决问题,但至少目前情况属于较好的解决方案。 1.用APP 手机APP(download.deepseek.com/app)和DeepSeek的官网均提供满血版服务。官网界面简洁直观,功能一目了然而手机APP则更加灵活便捷,对于教师来说,都能随时随地开启备课之旅,充分利用碎片化时间,来记录灵感。尽管目前官网在高峰时段可能会出现繁忙状况,但手机APP的稳定性相对好一些。当然也可以安装纳米搜索,360的DeepSeek专线,目前测试很稳定,在App商店搜索“360纳米搜索”,找到“大模型”栏目,选用DeepSeek R1轻松体验。 2.硅基流动网站 硅基流动网站提供了满血版的DeepSeek R1,性能体验上跟官网不相上下。需要注意的是,直接对话的界面不会保存聊天记录,复制粘贴不太好用,且在使用过程中,当赠送的14元额度耗尽后,就需要进行充值。但对于追求个性化教学、愿意投入资源进行教学创新的教师来说
unity3d Gif图片播放插件(Cube版示例) 支持移动设备 不需要System.Drawing
内容概要:本文档详细介绍了在数据结构课程设计中,围绕哈夫曼树展开的设计任务。它首先提出了一套完整的流程——从读取文本文件到构建哈夫曼编码、译码直至实现文本文件的基本压缩存储机制。文档描述了哈夫曼编码原理的应用,展示了如何根据文本中出现频率不同的字符生成最优前缀编码,并提供了具体编码和译码的方法步骤。接着阐述了哈夫曼树的数据结构及其构建过程中涉及到的关键点如频率排序、二叉树节点管理、递归回溯编码路径等知识点;此外,针对特定功能模块提供了相应的伪代码段落,使读者更容易理解和模仿操作;文中还涵盖了对最终结果的测试案例及其实验分析,验证了算法效率。最后一节是对课程设计的学习感悟,强调了这次项目带来的技术成长和个人编程思维进步。 适合人群:适合计算机科学专业的大专生、本科生以及对数据结构、哈夫曼编码感兴趣的技术爱好者;尤其对于那些希望通过实例来深化理论认识的学生来说是非常有价值的参考资料。 使用场景及目标:本文旨在帮助初学者理解和掌握经典的哈夫曼编码原理和技术实现。它可以作为课堂上讲解哈夫曼编码算法的实际例子;同时也能为想要自己动手尝试编码的人提供详细的指导材料,从而达到理论与实践相结合的教学目的。此外还可以用来辅助理解诸如文件压缩这样的实际应用场景。 其他说明:本实验涉及了大量关于C/C++语言的基础语法知识,并使用了一些较为专业的概念和技术手段,在跟随教程练习之前最好先确保有一定的预备知识。
【毕业设计】基于python+django+vue.js开发的学生宿舍管理系统
chrome-headless-shell-mac-arm64-135.0.7011.0(Canary).zip
"基于Transformer-BILSTM的多变量时间序列预测模型——利用编码器挖掘光伏负荷数据复杂关系与依赖性以提高预测准确性","基于Transformer-BILSTM的多元时间序列预测模型:代码质量卓越,参数易调整,助力光伏与负荷数据精准预测",【Transformer-BILSTM多维时序预测】Transformer-BILSTM多变量时间序列预测,基于Transformer-BILSTM多变量输入模型。 matlab代码,2023b及其以上。 评价指标包括:R2、MAE、MSE、RMSE和MAPE等,代码质量极高,方便学习和替数据。 参数可方便更改,程序和excel数据放在一个文件夹,注释明细。 Transformer 作为一种创新的神经网络结构,深受欢迎。 采用 Transformer 编码器对光伏、负荷数据特征间的复杂关系以及时间序列中的长短期依赖关系进行挖掘,可以提高光伏功率、负荷预测的准确性。 ,Transformer-BILSTM; 多维时序预测; 多变量时间序列; 2023b MATLAB代码; 评价指标; 参数可改; 程序与数据整合; 光伏负荷预测; 长短期依
【毕业设计】IoT安全漏洞检测平台(中国民航大学本科毕业设计)
在 Python 实现机器学习舆情分析项目中,积累了一线经验。需做好数据预处理,如清洗、分词等;选合适算法,像朴素贝叶斯、LSTM。
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql5.7以上 部署环境:maven 数据库工具:navicat
COMSOL仿真技术研究偶极光源特性与应用,"COMSOL仿真技术下的偶极光源研究与应用",comsol仿真偶极光源 ,comsol仿真; 偶极光源; 偶极子辐射; 仿真建模,"Comsol仿真:偶极光源模拟与优化研究"
LabView阶次与振动噪声分析系统:旋转机械故障诊断与变速诊断的同步信号采集与分析平台,LabView阶次与振动噪声分析系统:旋转机械故障诊断与变速诊断的同步信号采集与阶次分析平台,labview阶次分析,振动噪声分析。 描述:旋转机械故障诊断,变速诊断,振动噪声分析,轴承诊断等。 功能: 1. 同步采集振动信号(或噪声信号)和速度信号,绘制振动曲线和速度曲线。 2.绘制色谱图,可以选择通道类型,自动分析图中阶次,可以db显示。 3.绘制功率阶次谱,可以选择合适窗函数,可以db显示。 4.阶次切片,分析不同阶次的相对大小。 可以选择横坐标类型,纵坐标可以db显示。 5.保存历史数据到文件中。 ,关键词:LabVIEW;阶次分析;振动噪声分析;旋转机械故障诊断;同步采集;色谱图;功率阶次谱;阶次切片;横纵坐标类型;历史数据保存。,LabView阶次分析与振动噪声诊断系统
"COMSOL瓦斯抽采技术:双重介质模型的应用与实践","基于COMSOL的瓦斯抽采双重介质模型研究",comsol瓦斯抽采-双重介质模型 ,comsol;瓦斯抽采;双重介质模型,双重介质模型在COMSOL瓦斯抽采中的应用