Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Text markieren in einer TextArea

  1. #1
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569

    Text markieren in einer TextArea

    Morgen,
    ich schreibe gerade an einem interaktiven Parser. Dafür muss will ich in einer TextArea den Satz, der gerade bearbeitet wird, farbig hervorheben (markieren). Mein Problem ist nun, dass die Markierung erst sichtbar wird, wenn der Benutzer einen Teil des Textes per Hand markiert hat., ansonsten wird zwar der Text durchlaufen, aber keine sichtbare Markierung angezeigt.
    Eine kleine Methode zeigt den Haken:

    Code:
    private void markNextSentence(){
    	text = taTextAnzeige.getText();
    	selectionStart = selectionEnd + 1;
    	selectionEnd = text.indexOf((int)'.', selectionEnd + 1);
    	taTextAnzeige.select(selectionStart, selectionEnd);
    	System.out.println("start: " + selectionStart + "\nende:  " + selectionEnd);
    }
    selectionStart und selectionEnd sind initialisiert mit 0 bzw. 1, falls es der erste Lauf ist.
    Weiß jemand, wie ich das hinkriege, dass ohne vorherige Auswahl des Benutzers markiert wird?
    Das Ziel ist das Ziel.

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.08.2006
    Beiträge
    101
    Hmmm... Habe das gerade mal nachgebaut. Einfach nen JFrame mit einer JTextArea und ein Thread, der so lange deine Methode aufruft, bis der Text komplett durchlaufen ist. Ich bekomme jeden Satz markiert. Ich habe aber eine Vermutung, woran es liegen könnte. Die Verarbeitung eines Satzes wird vermutlich recht wenig Zeit in Anspruch nehmen. In meinem Thread hatte ich vor jeder Iteration ein sleep(2000) eingebaut, wenn ich das rausnehme bekomme ich die Markierung auch nur noch als leichtes Flackern zu sehen. Je nach verwendetem Rechner und verwendetem L&F könnte das dann tatsächlich dazu führen, dass es bei dir aussieht, als würde nicht markiert...

  3. #3
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    An der Geschwindigkeit liegt es nicht, denn bei mir wird das Weiterlesen durch einen Buttondruck ausgelöst. Immerhin habe ich aber inzwischen ein Workaround gefunden:
    Es muss sichergestellt sein, dass die TextArea nach dem Füllen wenigstens ein mal den Focus erhält, also nach dem Setzen des Textes ein textArea.requestFocus() aufrufen. Möglicherweise werden die markierten Positionen erst bei Focuserhalt initialisiert.

    Vielen Dank für Deine Mühe.
    Das Ziel ist das Ziel.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •