2012-10-01 56 views
6

即使对于一个团队项目来说,这也有点具有挑战性,更不用说一个人的实现了,但我试图用语法高亮显示一个简单而优雅的文本编辑器,使用JEditorPane。我偶然发现this已经停产了,真的很难让我理解所有的词法分析器文件和.lex内部的东西。我甚至在一些博客中发现,这个项目后来被其他一些团队采用,但还是停止了。我不需要它太花哨,就像有代码折叠和东西(尽管我很想找出如何做到这一点),但我至少需要一个基本语法突出显示存在和几乎行最左边的数字就像记事本+ +例如。请记住,我只需要它突出显示Java源代码,至少现在是如此。带语法高亮显示和行号的文本编辑器?

我正在寻找的是一个教程,一个详细记录的示例和示例代码,一个预先制作的软件包,甚至是一个NetBeans工具都可以实现的技巧,我并不需要从头开始编写源代码,我只需要一个可以使用的实现。提前致谢!

P.S.This不会是商业或太大,不要问为什么我想重新发明轮子,当有这么多的编程编辑器,我正在学习,这对我来说是一个很好的练习!

+0

这个人帮了我很多忙,当我需要做类似的事情时:@StanislavL(http://stackoverflow.com/users/301607/stanislavl) –

+0

我会简单检查一下他的答案,如果我可以查看所有他们。你能把我和他帮助过的类似话题联系起来吗? :) –

+0

那是在之前。我发布了他的个人资料的链接,以便您可以尝试直接与他交谈。 –

回答

5

RSyntaxTextArea是BSD许可并支持您的要求,加上代码折叠等等。使用非常简单。

+0

似乎是一个非常好的主意,我会检查出来!谢谢! :) –

+0

简单,优雅,惊人的和我很喜欢的很多额外的功能!你为我节省了很多搜索和麻烦!谢谢! :d –

4

您是否看到过Netbeans的这个tutorial?还是你检查了这个秋千component

+0

+1一些不错的链接 –

+0

第二个链接的例子甚至没有编译?第27行错误:找不到org.jdesktop.swingx.JXEditorPane的类!? –

+0

顺便说一句,这些都没有任何启发我,他们甚至更困惑我! :/ –

1

嗯,我在一个类似的项目上工作,这是我想出的。至于行号,我使用了一个连接到实际文本窗格的滚动窗格。

public class LineNumberingTextArea extends JTextArea 
{ 
private JTextPane textArea; 


/** 
* This is the contructor that creates the LinNumbering TextArea. 
* 
* @param textArea The textArea that we will be modifying to add the 
* line numbers to it. 
*/ 
public LineNumberingTextArea(JTextPane textArea) 
{ 
    this.textArea = textArea; 
    setBackground(Color.BLACK); 
    textArea.setFont(new Font("Consolas", Font.BOLD, 14)); 
    setEditable(false); 
} 

/** 
* This method will update the line numbers. 
*/ 
public void updateLineNumbers() 
{ 
    String lineNumbersText = getLineNumbersText(); 
    setText(lineNumbersText); 
} 


/** 
* This method will set the line numbers to show up on the JTextPane. 
* 
* @return This method will return a String which will be added to the 
* the lineNumbering area in the JTextPane. 
*/ 
private String getLineNumbersText() 
{ 
    int counter = 0; 
    int caretPosition = textArea.getDocument().getLength(); 
    Element root = textArea.getDocument().getDefaultRootElement(); 
    StringBuilder lineNumbersTextBuilder = new StringBuilder(); 
    lineNumbersTextBuilder.append("1").append(System.lineSeparator()); 

    for (int elementIndex = 2; elementIndex < root.getElementIndex(caretPosition) +2; 
     elementIndex++) 
    { 
     lineNumbersTextBuilder.append(elementIndex).append(System.lineSeparator()); 
    } 
    return lineNumbersTextBuilder.toString(); 
} 
} 

的语法高亮不是一件容易的事,但我开始是能够搜索基于关闭包含所有关键字的一些文本文件字符串:滚动面板,然后用下面的代码换号某种语言。基本上基于文件的扩展名,该函数将找到正确的文件并查找该文件中包含在文本区域中的单词。

相关问题