Hallo,
ich will einen kleinen Java Editor schreiben der Code formatiert. Da bin ich auf einige Probleme gestoßen die ich einfach nicht verstehe von der Logic her.
Ich habe auch schon min. 2 Tage lang im Internet nach Ähnlichen Problemen und Lösungen gesucht aber nichts passendes gefunden. Ich hoffe Ihr könnt mir ein bisschen helfen. Danke.
Ich habe ein TextPane darauf habe ich ein Keylistener gesetzt. Wenn der User etwas eingibt soll der Code überprüft und dann dementsprechend angepasst werden (Syntax Highlighting usw.).
Problem 1:
Der User schreibt einen einzeiligen Kommentar. Ich laufe über den gesamten Text und überprüfe jedes Zeichen, wenn das Zeichen ein / ist und das nächste ein / ist, will ich die gesamte Zeile in grüner Farbe darstellen. Die Funktioniert auch sollange der user kein \n oder \r (\r verstehe ich sowieso nicht) eingibt.
Auf jeden Fall wenn er dieses Zeichen eingibt und bei der neuen Zeile wieder ein Kommentar schreibt werden die ersten beiden Zeichen nicht mehr formatiert. Warum nicht? Nachfolgend mal die Methode die jedesmal nach einen ausgelösten KeyListener ausgeführt wird.
ich will einen kleinen Java Editor schreiben der Code formatiert. Da bin ich auf einige Probleme gestoßen die ich einfach nicht verstehe von der Logic her.
Ich habe auch schon min. 2 Tage lang im Internet nach Ähnlichen Problemen und Lösungen gesucht aber nichts passendes gefunden. Ich hoffe Ihr könnt mir ein bisschen helfen. Danke.
Ich habe ein TextPane darauf habe ich ein Keylistener gesetzt. Wenn der User etwas eingibt soll der Code überprüft und dann dementsprechend angepasst werden (Syntax Highlighting usw.).
Problem 1:
Der User schreibt einen einzeiligen Kommentar. Ich laufe über den gesamten Text und überprüfe jedes Zeichen, wenn das Zeichen ein / ist und das nächste ein / ist, will ich die gesamte Zeile in grüner Farbe darstellen. Die Funktioniert auch sollange der user kein \n oder \r (\r verstehe ich sowieso nicht) eingibt.
Auf jeden Fall wenn er dieses Zeichen eingibt und bei der neuen Zeile wieder ein Kommentar schreibt werden die ersten beiden Zeichen nicht mehr formatiert. Warum nicht? Nachfolgend mal die Methode die jedesmal nach einen ausgelösten KeyListener ausgeführt wird.
Java:
try {
if (getDocument() == null) {
return;
}
// no text to check
if (isDocumentEmpty()) {
return;
}
final int startOffset = getDocument().getStartPosition().getOffset();
// loop over all signs by the text
int currPos = startOffset;
while (currPos < getDocumentLength()) {
if (isDocumentEmpty()) {
return;
}
char currChar = getText().charAt(currPos);
// check of commentare on the position
if (currChar == '/' && currPos + 1 < getDocumentLength()) {
try {
if (getText().charAt(currPos + 1) == '/') {
// Loop from the actually pos to the pos by end of
// the line and set
while (currChar != '\n' || currChar != '\r') {
actionRefreshStyleOnPlace(currPos, 1, lineComment);
currChar = getText().charAt(currPos);
currPos++;
}
}
} catch (Exception exc) {
}
}
currPos++;
}
} catch (Exception exception) {
exception.printStackTrace();
}
/**
* @Author jkonopka
* @Date 20.06.2010
*/
private void actionRefreshStyleOnPlace(final int begin, final int length, final SimpleAttributeSet set) {
final StyledDocument styledDoc = getStyledDocument();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
styledDoc.setCharacterAttributes(begin, length, set, false);
}
});
}