Markiert die aktuelle Zeile in JTextPane

8

Ich versuche seit mehr als zwei Tagen, eine spezielle Anforderung für ein Texteditorfenster zu implementieren ... leider bisher ohne Erfolg: (

Ziel ist es, ein Texteditor-Fenster zu bekommen, das wie andere Texteditoren die aktuelle Zeile hervorhebt. Mit der aktuellen Zeile meine ich die Zeile, in der sich der Cursor / Caret befindet.

Ich habe bereits zwei verschiedene Ansätze gefunden, aber leider kann ich sie nicht übernehmen, so dass sie wie erwartet funktionieren.

Der erste Ansatz besteht darin, DefaultHighlighter ( Ссылка ) zu überschreiben. Im zweiten Ansatz wird stattdessen HighlighterPainter überschrieben ( Ссылка ).

Im Moment versuche ich, den ersten Ansatz in meinem Projekt zu übernehmen, aber wie gesagt, es funktioniert nicht wie gewünscht.

Am Ende dieses Beitrags poste ich eine kleine Beispielanwendung, die das Problem demonstriert.

  • Wenn ich das Programm starte, wird der Cursor an den Anfang der ersten Zeile gesetzt. Die Linie ist jedoch nicht hervorgehoben.
  • Jetzt tippe ich ein paar Zeichen ein. Diese Zeichen werden hervorgehoben, aber nur diese Zeichen sind nicht die komplette Zeile
  • Ich drücke Enter, um zur nächsten Zeile zu gelangen. Die erste Zeile ist nicht mehr markiert, was korrekt ist. Die zweite Zeile ist nicht markiert, was nicht korrekt ist. Auch wenn ich einige Zeichen eintippe, werden diese markiert, aber nicht die komplette Zeile.
  • Wenn ich jetzt den Cursor in die erste Zeile zurückbewege, entweder mit der Cursor-Taste oder mit der Maus, wird die komplette erste Zeile hervorgehoben, nicht nur die vorhandenen Zeichen. Das ist das Verhalten, das ich von Anfang an möchte.

Ich hoffe, jeder kann mir sagen, was ich hier falsch mache ... oder erklären, warum es überhaupt nicht möglich ist, dieses Problem zu lösen. Irgendwelche alternativen Lösungen, wie ich die Linienhervorhebung verwirklichen könnte, werden auch sehr geschätzt!

Vielen Dank im Voraus Prost Predigt

%Vor%     
Preachie 23.03.2011, 12:55
quelle

3 Antworten

3

Ссылка

Ich denke, das ist es wonach Sie suchen. Ich habe diese LinePainter -Klasse genommen und deinen Konstruktor in eine Hauptmethode kopiert, deine Textmarker-Teile entfernt und new LinePainter(textPane); Works wie ein Charm hinzugefügt.

    
spedsal 23.03.2011, 13:53
quelle
2

Unten ist der Code zum Extrahieren von Text aus der aktuellen Zeile. Sie können dieselbe Logik verwenden, um erforderliche Indizes zu erhalten und Text

hervorzuheben %Vor%     
sigirisetti 15.03.2012 03:10
quelle
1

Ich denke, dass dies mit Textmarkern schwer zu erreichen sein könnte - ich glaube nicht, dass es genau dafür gedacht ist. Möglicherweise müssen Sie es mit benutzerdefinierten Malcode tun:

%Vor%     
Russ Hayward 23.03.2011 13:54
quelle

Tags und Links