2012-10-01 27 views
6

Esto es un poco desafiante incluso para un proyecto de equipo, y mucho menos para una implementación de un solo hombre, pero estaba tratando de armar un editor de texto simple pero elegante con resaltado de sintaxis, usando un JEditorPane. Me encontré con this, que fue descontinuado y realmente difícil de entender con todos los archivos lexer y las cosas .lex dentro. Incluso encontré en algún blog que este proyecto fue luego asumido por otro equipo, pero aún así se descontinuó. No necesito que sea demasiado elegante, como tener un plegado de código y otras cosas (aunque estoy tentado de descubrir cómo hacerlo), pero necesito al menos una sintaxis básica de que destaque para existir y casi línea números en el extremo izquierdo como Notepad ++ por ejemplo. Tenga en cuenta que solo lo necesito para resaltar el código fuente de Java, al menos por ahora.Editor de texto con resaltado de sintaxis y números de línea?

Lo que estoy buscando es un tutorial, un ejemplo bien documentado y un código de muestra, un paquete prefabricado, incluso una herramienta para NetBeans puede hacer el truco, no necesito necesariamente el código fuente escrito desde cero , Solo necesito una implementación que pueda ser de utilidad. ¡Gracias por adelantado!

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

+0

Este tipo ayudó mucho cuando tenía que hacer algo similar: @StanislavL (http://stackoverflow.com/users/301607/stanislavl) –

+0

me dará una breve comprobación de sus respuestas si puedo mirar a través de todos ellos. ¿Puedes vincularme el tema similar con el que te ayudó? :) –

+0

Eso fue antes de SO. Publiqué el enlace de su perfil para que puedas tratar de hablar directamente con él. –

Respuesta

5

RSyntaxTextArea tiene licencia BSD y es compatible con sus requisitos, además de plegado de código y más. Muy simple de usar

+0

¡Parece una muy buena idea, lo comprobaré! ¡Gracias! :) –

+0

¡Simple, elegante, increíble y mucha funcionalidad extra que realmente me gusta! ¡Me salvaste un montón de búsquedas y problemas! ¡Gracias! :RE –

4

¿Has visto esto tutorial alrededor de Netbeans? o ¿has verificado este giro component?

+0

+1 algunos enlaces agradables –

+0

¿El segundo ejemplo del enlace ni siquiera se compila? Error en la línea 27: clase para org.jdesktop.swingx.JXEditorPane no encontrado !? –

+0

BTW ninguno de estos me iluminó de ninguna manera, ¡incluso me confundieron más! :/ –

1

Bueno trabajé en un proyecto similar y esto es lo que se me ocurrió. En cuanto a los números de línea, usé un panel de desplazamiento adjunto al panel de texto real. A continuación, el panel de desplazamiento estaba cambiando 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 lo que empecé con estaba siendo capaz de buscar cadenas en base a algunos archivos de texto que contenían todas las palabras clave para una cierto lenguaje Basada básicamente en la extensión de un archivo, la función encontraría el archivo correcto y buscaría las palabras en ese archivo que estaban contenidas dentro del área de texto.

Cuestiones relacionadas