2012-10-01 14 views
6

Das ist ein bisschen schwierig, wahrscheinlich sogar für ein Teamprojekt, geschweige denn für eine Ein-Mann-Implementierung, aber ich habe versucht, einen einfachen, aber eleganten Texteditor mit Syntaxhervorhebung unter Verwendung einer JEditorPane zusammenzustellen. Ich stolperte über this, die eingestellt wurde und wirklich schwer für mich, mit allen lexer Akten und .lex Sachen innerhalb zu verstehen. Ich fand sogar in einigen Blogs, dass dieses Projekt später von einem anderen Team übernommen wurde, aber sogar wieder eingestellt wurde. Ich brauche es nicht zu extravagant, wie Code Faltung und Sachen (obwohl ich versucht bin, herauszufinden, wie dies zu tun), aber ich brauche mindestens eine grundlegende Syntax Hervorhebung zu existieren und ziemlich viel Linie Zahlen auf der linken Seite wie Notepad ++ zum Beispiel. Denken Sie daran, dass ich es nur zum Markieren von Java-Quellcode brauche, zumindest für den Moment.Texteditor mit Syntax-Highlighting und Zeilennummern?

Was ich suche ist entweder ein Tutorial, ein gut dokumentiertes Beispiel und Beispielcode, ein vorgefertigtes Paket, sogar ein Tool für NetBeans kann den Trick machen, ich brauche den Quellcode nicht von Grund auf neu geschrieben Ich brauche nur eine Implementierung, die nützlich sein kann. Danke im Voraus!

P.S.Dies ist nicht kommerziell oder zu groß, frage nicht, warum ich das Rad neu erfinden will, wenn es so viele Programmier-Editoren gibt, ich lerne und dies kam mir als eine schöne Übung!

+0

Dieser Typ half mir sehr, wenn ich etwas Ähnliches machen musste: @StanislavL (http://Stackoverflow.com/users/301607/stanislavl) –

+0

Ich werde seine Antworten kurz überprüfen, wenn ich alles durchsehen kann Sie. Kannst du mich mit dem ähnlichen Thema verbinden, mit dem er dir geholfen hat? :) –

+0

Das war vor SO. Ich habe den Link seines Profils gepostet, damit du direkt mit ihm reden kannst. –

Antwort

5

RSyntaxTextArea ist BSD lizenziert und unterstützt Ihre Anforderungen, plus Code-Faltung und mehr. Sehr einfach zu bedienen.

+0

Scheint wie eine sehr gute Idee, ich werde es ausprobieren! Vielen Dank! :) –

+0

Einfach, elegant, erstaunlich und viele zusätzliche Funktionen, die ich wirklich mag! Du hast mir eine Menge Suchen und Ärger erspart! Vielen Dank! : D –

4

Haben Sie diese tutorial bei Netbeans gesehen? oder hast du diesen Schwung überprüft component?

+0

+1 einige nette Links –

+0

Second Link's Beispiel kompiliert nicht einmal? Fehler in Zeile 27: Klasse für org.jdesktop.swingx.JXEditorPane nicht gefunden !? –

+0

BTW keiner von diesen erleuchtete mich in irgendeiner Weise, sie verwirrten mich sogar mehr! :/ –

1

Nun, ich arbeitete an einem ähnlichen Projekt und hier ist, was ich gefunden habe. So weit die Zeilennummern reichen, habe ich einen Scrollpanel verwendet, der an die eigentliche Texttafel angefügt ist. Die scrollpane wurde dann ändert Zahlen mit dem folgenden Code:

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

Die Syntax-Hervorhebung ist keine leichte Aufgabe, aber was habe ich angefangen mit wurde für Strings zu suchen in der Lage, einige Textdateien basiert weg, die alle Schlüsselwörter für ein enthaltenes bestimmte Sprache. Grundsätzlich würde die Funktion, basierend auf der Erweiterung einer Datei, die richtige Datei finden und nach Wörtern in dieser Datei suchen, die innerhalb des Textbereichs enthalten sind.