关于编译器中关键字变色的问题 如果用JAVA来实现这个功能,应该怎么去实现,谁会来个例子,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 aaaaaaaaa public static string ReplaceRed(string strtitle, string redkey) { if (redkey == "" || redkey == null) { return strtitle; } else strtitle = strtitle.Replace(redkey, " <font color='#ff0000'>" + redkey + " </font>"); return strtitle; } http://blog.csdn.net/raphaelxia/archive/2006/02/12/597465.aspximport java.util.StringTokenizer;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.text.*;import javax.swing.event.*;import javax.swing.text.rtf.RTFEditorKit;public class MyTextPane extends JTextPane { protected StyleContext m_context; protected DefaultStyledDocument m_doc; private MutableAttributeSet keyAttr,normalAttr; private MutableAttributeSet inputAttributes = new RTFEditorKit().getInputAttributes(); private String[] keyWord={"int","float"}; public MyTextPane() { super(); m_context = new StyleContext(); m_doc = new DefaultStyledDocument(m_context); this.setDocument(m_doc); this.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent ke) { syntaxParse(); } });//定义关键字显示属性 keyAttr = new SimpleAttributeSet(); StyleConstants.setForeground(keyAttr, Color.green);//定义一般文本显示属性 normalAttr = new SimpleAttributeSet(); StyleConstants.setForeground(normalAttr, Color.blue); } public void syntaxParse() { try { String s = null; Element root = m_doc.getDefaultRootElement(); int cursorPos = this.getCaretPosition(); int line = root.getElementIndex(cursorPos); Element para = root.getElement(line); int start = para.getStartOffset(); int end = para.getEndOffset() - 1; s = m_doc.getText(start, end - start); int i = 0; int xStart = 0;//分析关键字--- m_doc.setCharacterAttributes(start, s.length(),normalAttr, false); MyStringTokenizer st = new MyStringTokenizer(s); while( st.hasMoreTokens()) { s = st.nextToken(); if ( s == null) return; for (i = 0; i < keyWord.length; i++ ) { if (s.equals(keyWord[i])) break; } if ( i >= keyWord.length ) continue; xStart = st.getCurrPosition(); //设置关键字显示属性 m_doc.setCharacterAttributes(start+xStart, s.length(), keyAttr, false); } inputAttributes.addAttributes(normalAttr); } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String[] args) { JFrame frame = new JFrame("test text pane"); frame.getContentPane().add(new MyTextPane()); WindowListener wndCloser = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; frame.addWindowListener(wndCloser); final int inset = 50; Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); frame.setBounds ( inset, inset, screenSize.width - inset*2, screenSize.height - inset*2 ); frame.show(); }}/*在分析字符串的同时,记录每个token所在的位置**/class MyStringTokenizer extends StringTokenizer{ String sval = " "; String oldStr,str; int m_currPosition = 0,m_beginPosition=0; MyStringTokenizer(String str) { super(str," "); this.oldStr = str; this.str = str; } public String nextToken() { try { String s = super.nextToken(); int pos = -1; if (oldStr.equals(s)) { return s; } pos = str.indexOf(s + sval); if ( pos == -1) { pos = str.indexOf(sval + s); if ( pos == -1) return null; else pos += 1; } int xBegin = pos + s.length(); str = str.substring(xBegin); m_currPosition = m_beginPosition + pos; m_beginPosition = m_beginPosition + xBegin; return s; } catch (java.util.NoSuchElementException ex) { ex.printStackTrace(); return null; } } //返回token在字符串中的位置 public int getCurrPosition() { return m_currPosition; }}本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/raphaelxia/archive/2006/02/12/597465.aspx 传参数问题 小程序编译通不过 帮忙指教一下... 关于类的一道很简单的题目 偶想学习Java,就是英语不好,不知道影响大不大?? 用JFrame写程序怎样使窗口最大化?? 如何在一个static方法中知道该方法所在的类?请教了 JDK环境的配置 请问这段代码应该如何去重构他,目前这段代码会乱. 再问appletviewer,98下不可用 Java程序可移植性好的原因是虚拟机,那C++呢 为何这样行,这样却不行? 我的qq疑问
{
if (redkey == "" || redkey == null)
{
return strtitle;
}
else
strtitle = strtitle.Replace(redkey, " <font color='#ff0000'>" + redkey + " </font>");
return strtitle;
}
import java.util.StringTokenizer;import java.awt.*;
import java.awt.event.*;import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import javax.swing.text.rtf.RTFEditorKit;public class MyTextPane extends JTextPane { protected StyleContext m_context;
protected DefaultStyledDocument m_doc;
private MutableAttributeSet keyAttr,normalAttr;
private MutableAttributeSet inputAttributes =
new RTFEditorKit().getInputAttributes(); private String[] keyWord={"int","float"}; public MyTextPane() {
super();
m_context = new StyleContext();
m_doc = new DefaultStyledDocument(m_context);
this.setDocument(m_doc); this.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent ke) {
syntaxParse();
}
});//定义关键字显示属性
keyAttr = new SimpleAttributeSet();
StyleConstants.setForeground(keyAttr, Color.green);//定义一般文本显示属性
normalAttr = new SimpleAttributeSet();
StyleConstants.setForeground(normalAttr, Color.blue);
} public void syntaxParse() {
try {
String s = null;
Element root = m_doc.getDefaultRootElement(); int cursorPos = this.getCaretPosition();
int line = root.getElementIndex(cursorPos); Element para = root.getElement(line);
int start = para.getStartOffset();
int end = para.getEndOffset() - 1;
s = m_doc.getText(start, end - start); int i = 0;
int xStart = 0;//分析关键字---
m_doc.setCharacterAttributes(start, s.length(),normalAttr, false);
MyStringTokenizer st = new MyStringTokenizer(s);
while( st.hasMoreTokens()) {
s = st.nextToken();
if ( s == null) return;
for (i = 0; i < keyWord.length; i++ ) {
if (s.equals(keyWord[i])) break;
}
if ( i >= keyWord.length ) continue; xStart = st.getCurrPosition(); //设置关键字显示属性
m_doc.setCharacterAttributes(start+xStart, s.length(),
keyAttr, false);
}
inputAttributes.addAttributes(normalAttr);
} catch (Exception ex) {
ex.printStackTrace();
}
} public static void main(String[] args) {
JFrame frame = new JFrame("test text pane");
frame.getContentPane().add(new MyTextPane());
WindowListener wndCloser = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
frame.addWindowListener(wndCloser);
final int inset = 50;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setBounds ( inset, inset, screenSize.width - inset*2, screenSize.height - inset*2 );
frame.show();
}
}/*在分析字符串的同时,记录每个token所在的位置
*
*/
class MyStringTokenizer extends StringTokenizer{
String sval = " ";
String oldStr,str;
int m_currPosition = 0,m_beginPosition=0;
MyStringTokenizer(String str) {
super(str," ");
this.oldStr = str;
this.str = str;
} public String nextToken() {
try {
String s = super.nextToken();
int pos = -1; if (oldStr.equals(s)) {
return s;
} pos = str.indexOf(s + sval);
if ( pos == -1) {
pos = str.indexOf(sval + s);
if ( pos == -1)
return null;
else pos += 1;
} int xBegin = pos + s.length();
str = str.substring(xBegin); m_currPosition = m_beginPosition + pos;
m_beginPosition = m_beginPosition + xBegin;
return s;
} catch (java.util.NoSuchElementException ex) {
ex.printStackTrace();
return null;
}
} //返回token在字符串中的位置
public int getCurrPosition() {
return m_currPosition;
}
}本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/raphaelxia/archive/2006/02/12/597465.aspx