Wie ermittelt man, welche Zeilen in scrollbaren JTextArea sichtbar sind?

8

Wie kann man die Nummer der ersten sichtbaren Zeile und die Anzahl der Zeilen bestimmen, die momentan in scrollbarer JTextArea (JTextArea innerhalb einer JScrollPane) sichtbar sind?

    
Ma99uS 31.10.2012, 18:48
quelle

2 Antworten

2

Okay, das ist meine Meinung über das Problem ... (Nette Frage allerdings)

Es gibt eine kleine Überlegung, die Sie mit dieser Lösung haben müssen. Es wird teilweise angezeigte Zeilen zurückgeben.

%Vor%     
MadProgrammer 01.11.2012, 01:15
quelle
5

Interessante Frage, die mich eine Weile beschäftigt hat, aber ich denke, ich habe eine recht gute Antwort. Aber es könnte bessere Wege geben. Fühlen Sie sich frei zu kommentieren, um die Antwort zu verbessern.

Stategy:

  1. Finden Sie heraus, welche Zeilen mit FontMetrics und getVisibleRect ()
  2. sichtbar sind
  3. Finden Sie den Inhalt der sichtbaren Zeilen.

Also, meine Idee ist, dass wir vom sichtbaren Rechteck ausgehen sollten. Basierend darauf können wir herausfinden, was der erste sichtbare vertikale Versatz ( getVisibleRect().y ) und das Ende des sichtbaren vertikalen Versatzes ( getVisibleRect().y+getVisibleRect().height ) ist. Sobald wir das haben, können wir anhand der Höhe der Schriftart bestimmen, welche Zeilen sichtbar sind.

Der zweite Teil ist herauszufinden, was diese Zeilen enthalten. Hier verwende ich Utilities mit getRowStart() und getRowEnd() kommt ins Spiel.

Hier ist ein Beispielcode für das, was ich detailliert habe (das Ergebnis wird an die Konsole ausgegeben, wenn Sie die Größe des Rahmens ändern oder den Textbereich scrollen):

%Vor%

Wenn Sie auch eine horizontale Bildlaufleiste haben, sollten Sie in der Lage sein, horizontale Verschiebungen mit FontMetrics.stringWidth() zu berechnen.

    
Guillaume Polet 31.10.2012 22:24
quelle