Pregunta

Esto es un poco desafiante, incluso probablemente para un proyecto de equipo, y mucho menos para una implementación de una sola persona, pero estaba tratando de crear un editor de texto simple pero elegante con resaltado de sintaxis, usando un JEditorPane.me topé con este que fue descontinuado y realmente difícil para mí de entender con todos los archivos lexer y el material .lex que contiene.Incluso descubrí en algún blog que este proyecto fue asumido más tarde por otro equipo, pero incluso nuevamente se suspendió.No necesito que sea demasiado sofisticado, como tener código plegable y esas cosas (aunque estoy tentado a descubrir cómo hacerlo), pero necesito al menos un resaltado de sintaxis básica existir y prácticamente Línea de números en el extremo izquierdo, como Notepad++, por ejemplo.Tenga en cuenta que sólo lo necesito para resaltar el código fuente de Java, al menos por ahora.

Lo que estoy buscando es un tutorial, un ejemplo bien documentado y un código de muestra, un paquete prediseñado, incluso una herramienta para NetBeans que pueda funcionar. No necesito necesariamente el código fuente escrito desde cero, solo necesito una implementación que puede ser de utilidad.¡Gracias de antemano!

P.D. Esto no va a ser comercial ni demasiado grande, no pregunten por qué quiero reinventar la rueda cuando hay tantos editores de programación por ahí, estoy aprendiendo y esto me resultó un buen ejercicio.

¿Fue útil?

Solución

RSyntaxTextArea tiene licencia BSD y admite sus requisitos, además de plegar código y más.Muy sencillo de utilizar.

Otros consejos

Bueno, trabajé en un proyecto similar y esto es lo que se me ocurrió.En lo que respecta a los números de línea, utilicé un panel de desplazamiento adjunto al panel de texto real.Luego, el panel de desplazamiento cambiaba los números con el siguiente código:

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();
}
}

El resaltado de sintaxis no es una tarea fácil, pero comencé con la capacidad de buscar cadenas basadas en algunos archivos de texto que contenían todas las palabras clave para un idioma determinado.Básicamente, basándose en la extensión de un archivo, la función encontraría el archivo correcto y buscaría palabras en ese archivo que estuvieran contenidas dentro del área de texto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top