![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Gast
Beiträge: n/a
|
Hallo Forum, ich sitze hier schon den ganzen Tag an einem Projekt, das nicht ganz unwichtig für meinen Studienabschluß ist. Ich möchte eine Komponente schreiben, die einen vorgegebenen Text anhand von Signalwörtern in verschiedenen Farben highlighten kann. Das klappt schon prima, wenn der Text komplett in einer Zeile steht bzw. ich manuell '\n' in den Text einfüge. Dann klappt die "Worterkennung" und das Wort wird, wenn es im entsprechenden Vector steht, richtig formatiert. Zur Erklärung: die Klasse "HighlightedDocument", die das formatierbare Dokument darstellen soll, ist von DefaultStyledDocument abgeleitet. Diese Klasse beinhaltet eine Hashtable. Darin werden Vektoren gespeichert, deren Inhalte alle in derselben Art und Weise formatiert werden sollen. Die Vektoren werden in meinem Fall in der Klasse initialisiert, die eine Instanz von HighlightedDocument enthält. (Dies wird später noch anders geregelt, zum Entwickeln der Funktionalität jedoch reicht das so aus.) Bsp.: Code: Vector red=new Vector();
red.add("Das");
Vector bold=new Vector();
bold.add("Testtext");
Außerdem ist die Methode Code: insertString(int offset, String text, AttributeSet a) In ihr passiert folgendes:
wenn ich in einen Testtext manuell ein '\n' einfüge, wird der Zeilenumbruch richtig in der JTextPane, die die Instanz von HighlightedDocument enthält, dargestellt. Neue Zeilen werden entsprechend beachtet und umgebrochen. Da das HighlightedDocument aber (oder vor allem) auch zur Anzeige längerer Quellcodes genutzt werden soll, will ich die Texte nicht manuell eingeben müssen, sondern per URL-Verbindung in das Dokument laden. Das klappt auch prima. Dabei werden jedoch die Zeilenumbrüche ignoriert, d.h., die Formatierung (Einzüge) werden ignoriert. Die farbliche Formatierung funktioniert weiter wie bisher. Im Zuge des oben genannten Vorganges des Abarbeitens (siehe Aufzählung) des Dokumenteninhaltes will ich nun die Zeilenumbrüche erhalten. Die Quellcodedateien sind alle vorwiegend auf UNIX-Systemen gehalten, deshalb sollte LF (line feed) bzw. "\n" (Entsprechung lt. JAVA-API) doch der richtige Suchinhalt für das Pattern sein, oder? Ich nutze Pattern-Matching, um die Erkennung der einzelnen Zeichen zu bewerkstelligen. Meine Methode zum Erkennen eines Zeilenumbruchs sieht testweise so aus: Code: public boolean isLineTerminator(int position)
{
String current;
try
{
current=getText(position, 1);
if (Pattern.matches("\n", current))
return true;
else
return false;
}
catch (BadLocationException ble)
{
return false;
}
}
Code:
public void replaceLineTerminator(int position)
{
try
{
remove(position, 1);
super.insertString(position, "<- separator ->", null);
}
catch (BadLocationException ble)
{
ble.printStackTrace();
}
}
Lasse ich jedoch einen längeren JAVA-Quellcode untersuchen, der per URL-Verbindung geholt wurde, wird "<- separator ->" nicht eingefügt, alle Zeilenumbrüche werden ignoriert! Die Quellcodedatei habe ich mit Notepad++ kontrolliert, ihre Umbrüche werden nachweislich durch "line feed" ("\n") dargestellt. Wen jemand eine Idee hat, wieso Umbrüche in einem kurzen String erkannt und im Dokument korrekt dargestellt werden, aus einer Quellcodedatei kommend jedoch nicht beachtet werden, könnte er mir diese hier bitte einmal verraten. Danke schon einmal im Voraus, ich bin für jede Hilfe dankbar. MfG, pir187 |
|
| | Nach oben #2 |
| Gast
Beiträge: n/a
|
Vor lauter Verzeiflung habe ich gerade einen Test gemacht, um zu schauen, ob die Quelldatei überhaupt richtig übertragen wird. Code: try
{
URL url = new URL("http", "localhost", 80, "/source.txt");
InputStream in = url.openStream();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
String line=null;
StringBuffer buffer=new StringBuffer();
while ((line=read.readLine()) != null)
{
buffer.append(line);
}
textToHighlight=buffer.toString();
System.err.println(textToHighlight);
}
catch (FileNotFoundException fnfe)
{
fnfe.printStackTrace();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
UPDATE: Ich habe den Fehler gefunden. Er lag in meiner Routine zum Speichern des gelesenen Streams: Code: ...
while ((line=read.readLine()) != null)
{
buffer.append(line);
}
...
Code: while ((line=read.readLine()) != null)
{
buffer.append(line);
buffer.append("\n");
}
MfG, pir187 *dernunschlafengehenkann* |
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [PHP] Gästebuch auf Textdatei basierend | Jann Hendrik | Tutorials | 4 | 11.01.2006 07:50 |
| Netbeans generierter Code | bacarni | Tools, Server, Betriebssysteme | 2 | 15.09.2005 12:26 |
| PHP Code wird nicht ausgeführt ! | Dark Knight | PHP-Programmierung | 22 | 13.09.2005 14:12 |
| Internet-Explorer aktualisiert Code nicht | Gottzilla | Desktop-Applikationen und Grafik | 5 | 07.03.2005 17:28 |