...und immer wieder setCaretPosition()

Duckemai

Mitglied
Hallo zusammen,
habe das Forum schon durchsucht. Aber mein setCaretPosition() ist sozusagen mausetot.
Ich habe ein JTextArea, welches von einer txt-Datei befüllt wird. Nun soll mir aber die letzte Zeile angezeigt werden.
Ich habe rechts eine Scrollbar.

Mein Versuch:

meineJTextArea.read(new FileReader(DateiName), "");
meineJTextArea.setCaretPosition(meineJTextArea.getText().length());

Der Text wird angezeigt, aber er scrollt nicht runter.
Ich bekomme nicht mal beim Starten der Applikation den Focur rein. Selbst das hier unten:

meineJTextArea.setFocusable(true);
boolean test;
test= meineJTextArea.requestFocusInWindow();

ergibt für 'test' den Wert FALSE. Ist das ein Problem mit der Reihenfolge? Leider ist der Quelltext zu groß und aufgesplittet,
um ihn ganz hier aufzulisten. Gibt es dazu eine grundlegende Überlegung, die mir entgangen ist?
Über einen WindowListener hat es auch nicht geklappt.

Eins ist mir im Nachhinein noch aufgefallen. Wenn ich einen ActionListener per Button auslöse:
meineJTextArea.requestFocus();
meineJTextArea.setCaretPosition(meineJTextArea.getText().length());

selbst dann setzt er NICHT den Focus. Wenn ich aber ins JTextArea klicke und dann noch mal den Button drücke, dann scrollt er runter

Vielen Dank für jede Hilfe,
Duckemai
 
Zuletzt bearbeitet:
Hey

Mir ist da was aufgefallen...
meineJTextArea.setCaretPosition(meineJTextArea.getText().length());

Muss die Caret-Position nicht zwischen 0 und der Textlänge liegen? Also ich würde dort
Code:
meineJTextArea.setCaretPosition(meineJTextArea.getText().length() - 1);
einfügen.

An dem Focus-Problem forsche ich noch ein bisschen.

Nachtrag: Hast du schon versucht beim Parent Komponenten deiner TextArea nachzuschauen
ob diese den Focus erhält?

Freundliche Grüsse
CKingZesi
 
Zuletzt bearbeitet:
Hallo,
habe nun den ganzen Tag an dem Problem rumgeschraubt. Bis mir auffiel, dass in meinem

setLayout(null)

immer nur die erste Komponente den Focus hatte. Ich dachte, es läge daran, dass ich
keinen Panel benutze, und statt dessen direkt in den Frame schreibe. Das war es aber nicht.
Das Problem war nun, dass ich in der main immer noch meinen:

Rahmen.setVisible(true)

stehen hatte. Das habe ich gelöscht und in einer der Methoden durch

this.setVisible(true)

ersetzt. Wenn ich dann dahinter meine Anweisungen für den Focus schreibe:

meineJTextArea.requestFocusInWindow();
meineJTextArea.setCaretPosition(meineJTextArea.getText().length());

dann klappt es. Na ja, vielleicht stolpern andere auch darüber und werden dann diesen Artikel lesen.
PS: @CKingZesi BESTEN DANK, ein -1 scrollt einfach nur eine Zeile weniger runter.
 
Hey,

Schön das du dein Problem lösen konntest. Ich habe halt "nur" die API gelesen und dort steht das der Caret
immer eine Position zwischen 0 und der Länge des Textes haben muss. Hat in diesem Fall halt nichts gebracht.

Freundliche Grüsse
CKingZesi
 

Neue Beiträge

Zurück