- 浏览: 619966 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (314)
- 生活 (2)
- c# (37)
- 技术 (3)
- 400电话 (0)
- 400常见问题 (0)
- 400资费 (0)
- html (7)
- css (0)
- 数据库 (7)
- javascript (16)
- php (33)
- asp.net mvc2 (10)
- mysql (9)
- C# 3.0 LinQ (10)
- vs2005或vs2008 (4)
- flash and as3 (7)
- fms (1)
- dedeCMS (11)
- java (33)
- j2me (1)
- swing (1)
- c++ (1)
- jquery easyui (3)
- jquery (5)
- android (29)
- MongoDB (9)
- VtigerCRM (1)
- test (0)
- linux (30)
- nutch (2)
- SqlServer数据库 (2)
- 数据检索 (2)
- java抓取 (11)
- 乐天 (1)
- 淘宝 (1)
- Silverlight4.0 (6)
- sphinx实时索引 (5)
- ecshop (9)
- codeigniter(CI) (3)
- axure6 (1)
- 京东店铺装修教程 (2)
- xpath (1)
- joomla (2)
- bpm (1)
- Bootstrap (2)
- knockout (4)
- ecstore (4)
- css3 (1)
- 微信 (2)
- dede (0)
- soa_edi (1)
- odoo (0)
- web (1)
最新评论
-
骑着蜗牛超F1:
在ie6下报了个stack overflow at line ...
兼容ie6和ie7 的16进制码流在html中显示为图片代码(base64) -
冰之海洋:
好像少了一句代码吧? FloatingFunc.show(th ...
android 一直在最前面的浮动窗口效果 -
yanzhoupuzhang:
连接有问题!
iis7.0官方下载 IIS 7.0(微软Web服务器组件IIS 7.0) 官方(windows 2003,XP,2000) -
whatable:
唉,楼主你都没有搞清楚重量级和轻量级。。。。既然引用了SWT, ...
java swing 内置浏览器打开网页显示flash图表-swt Browser应用 -
yy_owen:
我晕啊,你链接的什么内容额,我要的iis,你链接个视频什么意思 ...
iis7.0官方下载 IIS 7.0(微软Web服务器组件IIS 7.0) 官方(windows 2003,XP,2000)
本文主要记录怎么给代码编辑器实际语法高亮显示的功能,先来张效果图吧:
当JEditorPane被创建时,它会把createDefaultEditorKit()方法(javax.swing.text.EditorKit的子类对象)的返回值作为默认的编辑器工具包,然后将文本的编辑与显示工作交给这个工具包。其原型为:
protected EditorKit createDefaultEditorKit() { return new PlainEditorKit(); }
这个方法默认是返回一个PlainEditorKit对象,也就是一个纯文本的编辑器工具包,所以JEditorPane默认并没有格式化与彩色显示等功
能,看来我们先要定制一个支持彩色显示的EditorKit,然后把它作为createDefaultEditorKit()的返回值。
EditorKit
基本上什么也没有做,只是提供了很多抽象方法给它的子类去实现,Swing默认已经给它添加了一个子类DefaultEditorKit(Swing常用
的一招,就是给抽象类前面加个Default进行最基本的实现),既然是Default,那它所提供的功能肯定和一个记事本没有多大区别,这要是继承下
来,有多少方法需要覆盖啊,别慌,查看一下Swing的源码,你会发现Swing还提供了一个继承自DefaultEditorKit的类
StyledEditorKit,顾名思义,这个类肯定为我们提供了很多支持格式化显示的方法,又是一个巨人,快,赶紧拉过来往肩上爬。
接下来就是覆盖StyledEditorKit中的相关方法了,其实有很多方法都可以覆盖,但是意义不是很大,比如
这个方法是获得此工具包声明支持的数据的 MIME 类型,默认是text/plain,也就是文本文档,Java文件说白了也是文本文档,不过可以让它返回 text/java 以唯一标识编辑器所支持的MIME类型。
EditorKit中有两个重要的方法实现对文档的管理与显示:
创建一个适合此编辑器类型文本存储模型。EditorKit把对文本文档的管理功能交给了这个方法的返回值。
获取适合生成此工具包生成的任何模型视图的工厂。EditorKit把编辑器的显示功能交给了这个方法的返回值,比如什么字符显示成什么样子,什么颜色等。我们必须覆盖这两个方法以实现自定义编辑器的功能。
因为我们的编辑器和JEditorPane唯一不同的可能就是代码怎么来显示,所以createDefaultDocument()可以返回一个默 认的javax.swing.text.DefaultStyledDocument 就行,对于getViewFactory,我们需要定制一个ViewFactory视图来实现编辑器独有的各种显示功能。
ViewFactory在Java中被定义为一个接口,里面提供了唯一的一个方法:
这个方法根据给定的文档的结构化元素创建一个视图。在这个方法中,我们只需要返回一个继承自View的视图即可,真正的显示任务是交给这个视图的。因此,我们的ViewFactory类很简单:
public class JavaViewFactory implements ViewFactory { /**//* * (non-Javadoc) * * @see javax.swing.text.ViewFactory#create(javax.swing.text.Element) */ public View create(Element element) { return new JavaEditorView(element); } }
接下来的重点就是这个JavaEditorView了,所有的语法高亮等显示功能都是交给它来完成的
View是一个抽象类,Swing默认给我们提供了多个它的子类,AsyncBoxView, ComponentView, CompositeView, GlyphView, IconView, ImageView, PlainView 以实现对不同文档类型的显示,当中只有PlainView是与文本文档相关的,它实现简单的多行文本视图的 View 接口,该文本视图的文本只有一种字体和颜色,没错,我们的JavaEditorView需要继承自PlainView。(http://www.my400800.cn )
PlainView提供了很多方法进行文本文档的视图显示,要实现高亮显示,我们关心的有两个方法:
一看名字就知道这个方法是控制选中状态下的显示方式,由于本文只讨论非选中状态。所以重点看一下另外一个方法:
这个方法将模型中给定的范围呈现为正常的未选定文本。使用前景色或指定的颜色显示文本。
参数:
g - 图形上下文(做Swing的人再熟悉不过了,文本也是画出来的)
x - 起始 X 坐标,该值 >= 0
y - 起始 Y 坐标,该值 >= 0
p0 - 模型中的起始位置,该值 >= 0
p1 - 模型中的结束位置,该值 >= 0
下面是覆盖后的实现:
protected int drawUnselectedText(Graphics g, int x, int y, int startOffset, int endOffset) throws BadLocationException { int docLength = getDocument().getLength(); int length = (endOffset < docLength ? endOffset : docLength) - startOffset; return scanParagraph(g, x, y, startOffset, length); }
先是得到从起始位置到结束位置的长度,然后再交由scanParagraph去处理指定长度的文本,其实也就是怎么把它画出来。
对于一个Java代码编辑器,要考虑类名,运算符,数字,关键字等的显示方式,所以scanParagraph要做的事情很多,本文只以怎么么高亮显示类名为例来说明:
private int scanParagraph(Graphics g, int x, int y, int startOffset, int length) throws BadLocationException
{
Segment seg = new Segment();
//得到编辑器组件
JavaCodeEditor editor = (JavaCodeEditor) getContainer();
//得到startOffset,位置开始的length个长度的字符串,其实也就是我们要处理的字符串
getDocument().getText(startOffset, length, seg);
for (int wordIndex = 0; wordIndex < seg.length();)
{
char currentChar = seg.charAt(wordIndex);
if (Character.isJavaIdentifierStart(currentChar))
{
//下面我默认用Object说明,实际中要处理seg中的内容。
String identifier = "Object";
int len = identifier.length();
//比如说以红色显示类名
Segment text = getLineBuffer();
getDocument().getText(startOffset + wordIndex, len, text);
//还有其它样式的话只管给g加
g.setColor(color);
Utilities.drawTabbedText(text, x, y, g, this, startOffset + wordIndex);
//下面的代码略
.
}
}
//下面的代码略
.
}
发表评论
-
Java 线程中的Join、wait、notify,sleep
2016-06-22 17:28 4171.wait和notify这两个方法都是Object中的方法 ... -
Java多线程sleep(),join(),interrupt(),wait(),notify()
2016-06-22 17:25 478浅析 Java Thread.join() ... -
Java和C#运行命令行并获取返回值 运行bat文件
2015-08-04 10:45 1271Java运行命令行的例子 import java.io.B ... -
HttpClient的超时用法小记
2012-05-06 08:23 905HttpClient在使用中有两个超时时间,是一直接触 ... -
JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介
2012-05-05 21:29 746在多线程大师Doug Lea的 ... -
XPath 语法 org.dom4j.Document
2012-02-07 13:12 1244XPath 使用路径表达式 ... -
Nutch命令大全
2011-12-28 15:12 1387Nutch采用了一种命令的方式进行工作,其命令可以是对局域网方 ... -
Nutch1.2搜索引擎使用详解
2011-12-27 17:12 1623Nutch作为一款刚刚诞生 ... -
ECLIPSE java.lang.OutOfMemoryError: PermGen space 错误
2011-12-21 15:03 1073ECLIPSE 最近一段时间经常报错,看了日志,有如下错误信息 ... -
nutch环境配置在windows系统上(借助Cygwin)
2011-11-16 11:09 1742nutch环境配置在windows系统上必须要安装【Cygwi ... -
Heritrix 和 Nutch 比较与分析(java开源网络爬虫)
2011-11-15 11:01 7399Heritrix项目介绍 Heritrix工程 ... -
heritrix 下载、安装、配置、以及简单开发
2011-11-04 11:36 1347一、下载: 到www.sourcef ... -
java 如何判断Socket已断开
2011-09-14 13:34 1686最近在开发中遇到一个问题,就是如何判断远端服务器是否已经断开连 ... -
java 程序内存溢出问题查找
2011-04-10 18:00 945这段是时间用java swing做了一个小程序,但是运行一点时 ... -
jtable 隐藏表头标题行
2011-04-08 10:59 3242今天需要把JTable的表头也就是标题行给隐藏掉,在晚上找了一 ... -
java FrameView 启动最大化
2011-03-30 08:49 1494FrameViewzView = new ... -
Swing窗口Linux下不支持最大化问题
2011-03-28 10:15 971由于最近一直在Linux下工作,今天遇到了Swing窗口不能最 ... -
java 抓取网页内容,可设定代理(HttpURLConnection)
2011-03-11 09:41 1433/* * To change this template, ... -
swing下 改变窗口样式为windows风格(swing控件样式不美观解决方案)
2011-03-02 15:52 2597在windows环境下可以用下面两种方法使窗口显示window ... -
swt Browser 如何打开新url链接地址
2011-02-28 17:27 1679上一篇文章【java swing 内置浏览器打开网页显示fla ...
相关推荐
Swing实现编辑器(支持语法高亮),支持的语言类型大致为十几个。
RSyntaxTextArea, 用于 Java Swing 应用程序的语法高亮,代码折叠文本编辑器 RSyntaxTextArea是 Java Swing 应用程序的一个可以自定义的语法高亮文本组件。 开箱即用,它支持 40 + 编程语言。代码折叠。搜索和替换...
该文本编辑器采用JAVA Swing框架进行开发,并使用JavaFX实现代码高亮和自动补全功能。具体实现思路如下: ### 1. 打开、保存、新建文本文件 使用JFileChooser类实现文件的打开、保存和新建功能。用户可以通过菜单...
MintChime 编辑器多种编程语言的源代码编辑器。
文本编辑器是一个基于Java的应用程序,用于编辑文本文件,具有常见的文本编辑功能,如打开、保存、编辑、查找替换等。以下是该文本编辑器的一些关键特点和功能: 用户界面设计: 简洁直观:设计简洁清晰的用户界面...
RSyntaxTextArea是Java Swing应用程序的可自定义的语法突出显示文本组件。 开箱即用,它支持40多种编程语言的语法突出显示,代码折叠,搜索和替换,并具有用于代码完成和拼写检查的附加库。 通过工具其他语言的语法...
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...
Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...
Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...
特征具有语法高亮显示HTML源代码编辑器上下文相关的摇摆动作无限撤消/重做表创建和编辑点击并拖动可调整大小的表格点击并拖动可调整大小的图像易于嵌入到Swing应用程序或Applet中您在HTML编辑组件中期望的所有基本...
Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...
Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...
Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...
Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...
Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...
Spring4GWT ...JARP是为petri 网提供的一个Java编辑器,基于ARP分析器。可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...