Java 具有语法突出显示和行号的文本编辑器?

Java 具有语法突出显示和行号的文本编辑器?,java,swing,syntax-highlighting,jeditorpane,line-numbers,Java,Swing,Syntax Highlighting,Jeditorpane,Line Numbers,这可能对团队项目来说也有点挑战,更不用说单人实现了,但我正试图使用JEditorPane组合一个简单而优雅的文本编辑器,并使用语法高亮显示。我偶然发现了一个已经停止使用的文件,里面有所有的lexer文件和.lex文件,这让我很难理解。我甚至在一些博客中发现,这个项目后来被其他团队接管,但甚至再次中断。我不需要它太花哨,比如代码折叠之类的东西(尽管我很想知道怎么做),但我至少需要一个基本语法高亮显示,并且在最左侧有非常多的行号,就像记事本++一样。请记住,我只需要它来突出显示Java源代码,至少现

这可能对团队项目来说也有点挑战,更不用说单人实现了,但我正试图使用
JEditorPane
组合一个简单而优雅的文本编辑器,并使用语法高亮显示。我偶然发现了一个已经停止使用的文件,里面有所有的lexer文件和.lex文件,这让我很难理解。我甚至在一些博客中发现,这个项目后来被其他团队接管,但甚至再次中断。我不需要它太花哨,比如代码折叠之类的东西(尽管我很想知道怎么做),但我至少需要一个基本语法高亮显示,并且在最左侧有非常多的行号,就像记事本++一样。请记住,我只需要它来突出显示Java源代码,至少现在是这样

我要找的是一个教程,一个有良好文档记录的示例和示例代码,一个预先制作的包,甚至是一个NetBeans工具都可以做到这一点,我不需要从头开始编写源代码,我只需要一个可以使用的实现。提前谢谢


顺便说一句,这不会是商业化的或太大的,不要问我为什么要重新发明轮子,因为有这么多的编程编辑器,我正在学习,这对我来说是一个很好的练习

获得BSD许可,支持您的需求,以及代码折叠等。使用非常简单。

我曾参与过一个类似的项目,下面是我的想法。就行号而言,我使用了一个附在实际文本窗格上的滚动窗格。滚动窗格随后使用以下代码更改数字:

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();
}
}
公共类LineNumberingTextArea扩展了JTextArea
{
私人JTextPane文本区;
/**
*这是创建LIN编号文本区域的构造函数。
*
*@param textArea我们将修改以添加
*它的行号。
*/
公用行号文本区域(JTextPane textArea)
{
this.textArea=textArea;
挫折背景(颜色:黑色);
setFont(新字体(“Consolas”,Font.BOLD,14));
可编辑设置(假);
}
/**
*此方法将更新行号。
*/
公共void updateLineNumbers()
{
字符串LineNumberText=GetLineNumberText();
setText(行号文本);
}
/**
*此方法将设置行号以显示在JTextPane上。
*
*@return此方法将返回一个字符串,该字符串将添加到
*JTextPane中的行号区域。
*/
私有字符串GetLineNumberText()
{
int计数器=0;
int-caretPosition=textArea.getDocument().getLength();
元素根=textArea.getDocument().getDefaultRootElement();
StringBuilder lineNumbersTextBuilder=新StringBuilder();
lineNumbersTextBuilder.append(“1”).append(System.lineSeparator());
for(int-elementIndex=2;elementIndex

语法突出显示不是一项容易的任务,但我首先能够根据包含某一语言的所有关键字的一些文本文件搜索字符串。基本上基于文件的扩展名,该函数将找到正确的文件,并在该文件中查找包含在文本区域内的单词。

您在Netbeans中看到了吗?或者你检查过这个swing吗?第二个链接的示例甚至没有编译?第27行错误:找不到org.jdesktop.swingx.JXEditorPane的类!?JXEditorPane它是SwingX组件的一部分,也许您没有rigth依赖项。对于本教程,您可能应该阅读整个系列