关键字高亮显示方法(2)!!
// 以下仅供参考!!...
import java.awt.*;
import java.awt.event.*;
import java.lang.StringBuffer;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
/**
* <p>Title: Editor</p>
* <p>Description: A Style Text Editor</p>
* <p>Copyright: Copyright (c) Afritxia 2002</p>
* <p>Company: None</p>
* @author Afritxia
* @version 1.0
*/
class MyEditorKit extends DefaultEditorKit
{
public MyEditorKit(){
super();
}
public ViewFactory getViewFactory(){
return new MyViewFactory();
}
}
class MyViewFactory implements ViewFactory
{
public MyViewFactory(){
}
public View create(Element element){
return new MyEditorView(element);
}
}
class MyEditorView extends PlainView
{
public MyEditorView(Element element){
super(element);
}
protected int drawUnselectedText(Graphics g, int x, int y, int p0, int p1)
throws BadLocationException{
Document doc=getDocument();
Segment segment=new Segment(), token=new Segment();
int index=0, count=p1-p0;
doc.getText(p0, count, segment);
for(int i=0; i<count; i++){
if(Character.isLetter(segment.array[segment.offset+i])){
index=i;
while(++i<count&&Character.isLetter(segment.array[segment.offset+i]));
doc.getText(p0+index, (i--)-index, token);
if(KeyWord.isKeyWord(token)){
g.setFont(KEYWORDFONT);
g.setColor(KEYWORDCOLOR);
}else{
g.setFont(TEXTFONT);
g.setColor(TEXTCOLOR);
}
x=Utilities.drawTabbedText(token, x, y, g, this, p0+index);
continue;
}else{
index=i;
while(++i<count&&!Character.isLetter(segment.array[segment.offset+i]));
doc.getText(p0+index, (i--)-index, token);
g.setFont(TEXTFONT);
g.setColor(TEXTCOLOR);
x=Utilities.drawTabbedText(token, x, y, g, this, p0+index);
continue;
}
}
return 0;
}
public static Font TEXTFONT=new Font("DialogInput", Font.PLAIN, 11);
public static Color TEXTCOLOR=Color.black;
public static Font KEYWORDFONT=new Font("Courier New", Font.BOLD, 11);
public static Color KEYWORDCOLOR=Color.black;
}
class KeyWord
{
public KeyWord(){
}
public static boolean isKeyWord(Segment seg){
boolean isKey=false;
for(int i=0; !isKey&&i<KEYWORDS.length; i++)
if(seg.count==KEYWORDS[i].length()){
isKey=true;
for(int j=0; isKey&&j<seg.count; j++)
if(seg.array[seg.offset+j]!=KEYWORDS[i].charAt(j))
isKey=false;
}
return isKey;
}
public static final String[] KEYWORDS={
"abstract", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue",
"default", "do", "double", "else", "extends", "final", "finally", "float", "for", "goto",
"if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "package",
"private", "protected", "public", "return", "short", "static", "strictfp", "super", "switch", "synchronized",
"this", "throw", "throws", "transient", "try", "void", "volatile", "while", "true", "false"
};
}
public class Editor extends JFrame
{
Container c;
JEditorPane editor=new JEditorPane();
MyEditorKit kit=new MyEditorKit();
public Editor(){
super("Editor");
initFrame();
setSize(640, 480);
}
private void initFrame(){
c=getContentPane();
c.setLayout(new BorderLayout());
editor.setFont(new Font("Courier New", Font.PLAIN, 11));
editor.setEditorKitForContentType("text/java", kit);
editor.setContentType("text/java");
editor.addCaretListener(new CaretListener(){
public void caretUpdate(CaretEvent e){
}
});
c.add(new JScrollPane(editor), BorderLayout.CENTER);
}
public static void main(String[] args){
Editor App=new Editor();
App.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
App.show();
}
}
问题点数:0、回复次数:4Top
1 楼beyond_xiruo(CorruptionException)回复于 2003-02-02 17:55:07 得分 0
goodTop
2 楼Afritxia(能活不易)回复于 2003-02-03 10:13:30 得分 0
Afritxia特别感谢:
在这里我要特别感谢http://www.chinajavaworld.net网站上的iwys和frui两位朋友!如果不是这两位朋友把自己的代码贴出来共享,恐怕我的这个高亮显示还是遥遥无期.虽然当时未能亲身参与论坛,但还是受益非浅!
http://www.chinajavaworld.net/ | 论坛 | Java GUI程序设计 精华区 | 主题:在JTextPane中如何设置局部文本(例如关键字)的Color很急!!
我想我会在之后的<<About My Editor>>文章中刨析这个算法.
最后,再次感谢iwys和frui两位朋友!
Top
3 楼Afritxia(能活不易)回复于 2003-02-03 11:34:38 得分 0
勘误:
protected int drawUnselectedText(Graphics g, int x, int y, int p0, int p1)
throws BadLocationException{
// 最后的一句return改成:
return x;
}Top
4 楼ZeroC(笨小孩)回复于 2003-02-03 14:56:46 得分 0
markTop
相关问题
- 如何高亮显示关键字?
- 如何在查询结果中高亮显示关键字?
- 如何高亮度显示pascal的关键字和保留字???
- 搜索完后,让搜索后的关键字高亮显示
- 在客户端用javascript对内容中的特定关键字加亮(高亮)显示的实现方法或思路
- 在客户端用javascript对内容中的特定关键字加亮(高亮)显示的实现方法或思路
- 如何用javascript高亮显示代码?方法我知道就是replace替换,我想求一个关于java,vb,html中的关键字完整的定义!
- ★☆★☆ 再问一个问题: 怎样高亮显示VC中的关键字?
- 如何让搜索关键字在搜索结果中高亮显示???
- 重大问题!用关键字搜索,如何将搜索结果中的关键字高亮显示出来?(像google那样?)




