WordEditor2 中编辑器的初期字体被配置到 config 目录下的配置文件中,默认为“宋体”文字大小默认为“14”。系统初期化时从配置文件中读取并以 Style 的方式设置为编辑器的默认值。WordEditor2 的编辑器是继承自 JTextPane ,所以它拥有解析 html 代码的能力。为了能够设置编辑器的全局字体,我在这里的处理是为编辑器追加 body 的 css 配置。
StringBuffer style = new StringBuffer();
style.append("body {");
style.append("font-size:");
style.append(wep.get("editor.font.size"));
style.append(";font-family:");
style.append(wep.get("editor.font.family"));
style.append(";margin:");
style.append(wep.get("editor.margin"));
style.append(";background:");
style.append(wep.get("editor.background"));
style.append(";");
this.doc.getStyleSheet().addRule(style.toString());
Continue Reading »
WordEditor 是为 Grape 写的一个文字处理器,实现了文字加粗、斜体、字体大小、字体样式、下划线、删除线、居左、居右、居中、文字颜色、文字背景色、插入本地图片、插入互联网图片、分隔线、下沉、上移、超链接、撤销、重做以及快捷键等基本的文字处理功能。也实现了保存为文本文件和
RTF 文件的功能。
WordEditor 支持多国语言,所有的文字以及消息都配置在 properties
文件中。若要生成中文的编辑器,只需要在构造方法中传入“cn”即可。例如:new
WordEditor(“cn”);若要生成英文的编辑器,将“cn”改为”en”即可。日文也相同。当然,前提是 config
文件夹下必需要有这几个配置文件。中文:CN.properties,英文:EN.properties,日文:JP.properties。目前我只做了英文和中文的
properties。
Continue Reading »
Swing 的 JTextPane 是非常强大的文字处理工具,它不但可以处理文本,也可以作为浏览器来显示指定的网页。利用 JTextPane 可以很轻松地开发类似 Word 之类的文字处理工具。比如要设置文本为粗体,可以这样实现:
MutableAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBold(attr, !StyleConstants
.isBold(((HTMLEditorKit) editor.getEditorKit())
.getInputAttributes()));
setCharacterAttributes(editor, attr, false);
设置背景色为:
MutableAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBackground(attr, color);
setCharacterAttributes(editor, attr, false);
看上去都没有什么问题,不过,若你的程序有保存功能,并且保存的是JTextPane生成的html,这样问题就来了。当利用getText方法取得生成的html代码时,我们发现虽然背景色的显示正确但html代码无法生成。这似乎是一个bug?不过没关系,我们可以利用HTMLEditorKit的insertHML来实现。
Continue Reading »
Swing包中的JTextPane功能非常强大,利用它,可以给容易地制做html、word等文字编辑器。但是JTextPane默认情况下按下Enter键,输出的html代码中总是显示如下:
<p style=”margin-top: 0px”></p>
margin-top: 0px的意思为上边距为0。也就是说当前行与前一行没有行间距。如果你正在制做类似Word这样的编辑器,很显然这并不是我们想要的。我们更希望<p>标签使用定义的css中的样式显示。说来惭愧,这个问题困扰了我很久,一直没有好的解决方法。曾经试图重写JTextPane的document,为其追加rule。也试过监控enter事件,并利用insertHtml插入<p>,结果都不理想。今天偶然的情况下,发现了解决方法,非常非常简单,只要在初始化JTextPane后,设置其默认文本即可。如下:
JTextPane tp = new JTextPane();
tp.setText(“<p></p>”);
这样设置后,输出的html代码就变为<p></p>了。越是简单的东西,越难找到问题所在,就是这么简单的设置,困扰了我很久。通过这个例子,也可以举一反三,实现例如<div>等html标签的默认样式。
希望对你有所帮助。