JScrollpane Focus

masterjcl

Mitglied
Guten Tag


Ich habe folgendes kleines Problem ich habe eine jTextarea in einem jScrollPane , dies funktioniert ohne Probleme. Wenn ich aber append mache und es geht über das Fenster nach unten hinaus bleibt der focus oben d.h. der Text wird angefügt , und ich kann auch dahin scrollen aber er soll automatisch nach unten scollen und das letzte was angefügt wurde zeigen.


hat jemand eine Idee


thx
 
Original geschrieben von masterjcl
Guten Tag


Ich habe folgendes kleines Problem ich habe eine jTextarea in einem jScrollPane , dies funktioniert ohne Probleme. Wenn ich aber append mache und es geht über das Fenster nach unten hinaus bleibt der focus oben d.h. der Text wird angefügt , und ich kann auch dahin scrollen aber er soll automatisch nach unten scollen und das letzte was angefügt wurde zeigen.

hat jemand eine Idee

thx

Ich habe sogar eine Lösung. ;-)

Code:
Point point = new Point( 0, (int)(yourTextField.getSize().getHeight()) );
jScrollPane.getViewport().setViewPosition( point );
 
vielen Dank das hat geklappt Problem ist nur welchen Listener soll man nehmen ich mache das zZ so ,mit jedem append rufe ich die Funktion zum setzen des Focus auf. Ich habe schon einige ausprobiert. Naja aber ansonsten super Tipp thx


jcl
 
Original geschrieben von masterjcl
vielen Dank das hat geklappt Problem ist nur welchen Listener soll man nehmen ich mache das zZ so ,mit jedem append rufe ich die Funktion zum setzen des Focus auf. Ich habe schon einige ausprobiert. Naja aber ansonsten super Tipp thx

jcl

Ich verstehe das Problem nicht... so funktioniert es doch.
 
Da hast Du recht, lediglich wenn es sich um ein Log handelt wird dieser von einigen Klassen als Ausgabe verwendet d.h. ich muss nach jdem append diese Funtion starten es währe besser wenn man ein Listener auf ItemStateChange legen könnte(wie bei einem Button oder Combobox) dies exisitiert leider in einem Scrollpane oder jTextArea nicht.
 
Original geschrieben von masterjcl
Da hast Du recht, lediglich wenn es sich um ein Log handelt wird dieser von einigen Klassen als Ausgabe verwendet d.h. ich muss nach jdem append diese Funtion starten es währe besser wenn man ein Listener auf ItemStateChange legen könnte(wie bei einem Button oder Combobox) dies exisitiert leider in einem Scrollpane oder jTextArea nicht.

Dann leite doch eine Klasse von JScrollPane ab und implementiere dort einen eigenen Listener, den Du bei Hinzufügen von Text in der MyTextArea verwendest.
 
Hallo!

Schau mal hier:

Code:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

/*
 * Created on 10.06.2004
 *
 */

/**
 * @author Administrator
 */
public class ScrollableJTextAreaExample extends JFrame {

	private JScrollPane scrollPane;
	private JTextArea textArea;

	public ScrollableJTextAreaExample() {
		super("ScrollableJTextAreaExample");
		setSize(320, 240);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		scrollPane = new JScrollPane();
		scrollPane.setSize(320, 240);

		textArea = new JTextArea("Blabblabla") {
			//Hier überschrieben wir die Append Methode das sie bei jedem Append
			//ans Ende der TextArea scrollt...
			public void append(String line) {
				super.append(line);
				this.setCaretPosition(this.getDocument().getLength());
			}
		};
		
		scrollPane.getViewport().add(textArea);

		getContentPane().add(scrollPane);

		setVisible(true);

		
		//Einfach mal eine 3Kbyte große Textdatei einlesen zum Testen ...
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				try {
					BufferedReader br =
						new BufferedReader(
							new FileReader("c:/setupSDKToolkitLog.txt"));
					String line = null;

					while ((line = br.readLine()) != null) {
						textArea.append(line + "\n");
					}

				} catch (FileNotFoundException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}

			}
		});

	}

	public static void main(String[] args) {
		new ScrollableJTextAreaExample();
	}
}

Gruß Tom
 
Komisch, bei mir ist das Verhalten genau umgekehrt.
Ich füge mit append Zeilen dazu, möchte aber, dass ich beim Öffnen des Frames immer die erste Zeile sehe. Möchte einen Text aus einem File darstellen. Bischen nervig immer nach ganz oben zu scrollen. Dies mit dem Viewpoint hat scheinbar keine Auswirkungen :confused:
 
Zurück