ok ich hoffe jemand kann mir weiterhelfen;
ich suche eine TextArea die Java-Quellcode-Syntax-Highlighting
beherscht.
Also ich würde gerne schreiben:
MyJTextArea javaEditor = new MyJTextArea();
und wenn im javaEditor ein Java-Befehl auftaucht dann sollte der eben
"gehighlighted" werden.
Gibt es da was fertiges oder muss man wieder alles selber machen ;-)
> ich suche eine TextArea die Java-Quellcode-Syntax-Highlighting
> beherscht.
>
> Also ich würde gerne schreiben:
>
> MyJTextArea javaEditor = new MyJTextArea();
>
> und wenn im javaEditor ein Java-Befehl auftaucht dann sollte der eben
> "gehighlighted" werden.
Mach's lieber andersrum. Pack die Zusatzfunktionalitaet Deiner Applikation
in ein Eclipse- oder IDEA-Plugin und passe so die Entwicklungsumgebung an.
Falls es keine Zusatzfunktionalitaet gibt, versuch lieber ein reales
Problem zu loesen ...
Matthias
--
Matthias Ernst
Software Engineer
CoreMedia - Smart Content Technology
> Gibt es da was fertiges oder muss man wieder alles selber machen ;-)
Da gibt es garantiert was fertiges, aber selber machen ist auch nicht so
schwer. Mit einem JTextArea wirst du übrigens nichts, es sollte ein
JEditorPane sein. Dort musst du dann das EditorKit austauschen welches
wiederum eine spezielle ViewFactory benötigt die dann einen View zur
Verfügung stellt, der sich entsprechend einfärben kann.
Beispiel:
class MyEditor extends JEditorPane {
MyEditor() {
setEditorKit(new MyEditorKit());
}
}
class MyEditorKit extends DefaultEditorKit {
MyViewFactory f = new MyViewFactory();
public ViewFactory getViewFactory() {
return f;
}
}
class MyViewFactory implements ViewFactory {
public View create(Element elem) {
return new MyView(elem);
}
}
Spannend ist jetzt MyView. Die folgende Implementierung ist sicherlich
nicht die effizienteste, kann aber alle der, die und das in einem Text
rot färben:
static class MyView extends WrappedPlainView {
private static Pattern pattern = Pattern.compile("d(er|ie|as)");
public MyView(Element elem) {
super(elem);
}
int drawUnselectedText(Graphics g, int x, int y, int p0, int p1)
throws BadLocationException {
Document doc = getDocument();
String text = doc.getText(p0, p1 - p0);
Matcher m = pattern.matcher(text);
Segment segment = getLineBuffer();
int i = 0;
while (m.find()) {
if (i < m.start()) {
g.setColor(Color.black);
doc.getText(p0 + i, m.start() - i, segment);
x = Utilities.drawTabbedText(segment, x, y, g, this, i);
}
g.setColor(Color.red);
i = m.end();
doc.getText(p0 + m.start(), i - m.start(), segment);
x = Utilities.drawTabbedText(segment, x, y, g, this, m.start());
}
if (i < text.length()) {
g.setColor(Color.black);
doc.getText(p0 + i, text.length() - i, segment);
x = Utilities.drawTabbedText(segment, x, y, g, this, i);
}
return x;
}
}
bye
--
Stefan Matthias Aust // "Ist es normal, nur weil alle es tun?" -F4
das ist ein reales Problem !!!
Und das ganze ist auch keine "normale" Entwicklungsumgebung.
> Hey das ist ist echt gut !! aber es ist mir dann doch etwas viel
> arbeit alle Java Befehle einzugeben
Zu viel Arbeit? Ich würde mal schätzen, das Pattern um alle
Schlüsselworte zu erweitern, dauert etwa 3min?! Gib bei Google "java
keyword list" ein, der erste Link hat eine Tabelle. Kopiere den Kram in
den Editor
abstract double int strictfp **
boolean else interface super
break extends long switch
byte final native synchronized
case finally new this
catch float package throw
char for private throws
class goto * protected transient
const * if public try
continue implements return void
default import short volatile
do instanceof static while
Ersetze jetzt "*" durch "" und " " durch " " und " " durch "|". Mache
daraus eine Zeile und paste sie in die passende Zeile im Quelltext.
Anzumerken bleibt, dass das gezeigte Verfahren nicht wirklich effizienzt
ist, keine Block- oder Zeilenkommentare erkennt, Schlüsselworte auch in
Kommentaren und Strings hervorhebt und sonstige Syntax nicht
berücksichtigt. Mit etwas Aufwand könnte man das aber verbessern,
entweder mehr Regexp oder einen speziellen Scanner benutzen.
Matthias Hoffmann wrote:
> Hallo,
>
> ok ich hoffe jemand kann mir weiterhelfen;
> ich suche eine TextArea die Java-Quellcode-Syntax-Highlighting
> beherscht.
Sieh Dir mal das JEdit Syntax Package unter
http://sourceforge.net/projects/jedit-syntax/ an.
Es hat mir bis jetzt ganz gute Dienste geleistet :)
Viele Grüße
Sven