JTextArea und JScrollPane

Sebastian29

Erfahrenes Mitglied
Hi an alle!

Im JTextArea wird der Text per Schleife untereinander geschrieben und ich möchte, dass die ScrollBalke immer unten bleibt, um die aktuelle untere Zeile zu bekommen.

Mit JTextArea.getLineCount() muss ich doch auf die Position von JTextArea setzen, aber ich weiss nicht, wie die Methode dafür heisst!

Muss ich auch noch den Event einbauen?

Gruß
Sebastian
 
Funktioniert bei mir so:
Java:
import javax.swing.*;

public class AutoScroll
{
  public AutoScroll() 
  {
    JFrame frame = new JFrame( "AutoScroller" );
    JScrollPane scroll = new JScrollPane();
    JTextArea area = new JTextArea();
    
    scroll.getViewport().add( area );

    frame.getContentPane().add( scroll );
    frame.setSize( 300, 300 );
    frame.setVisible( true );
    
    for ( int i = 0; i < 100; i++ ) 
    {
      area.append( i + "\n" );

      //Vertikale Scrollbar auf Maximum setzen
      int max = scroll.getVerticalScrollBar().getMaximum();
      scroll.getVerticalScrollBar().setValue( max );
      
      sleep();
    }
    
  }
  
  private void sleep()
  {
    try {
      Thread.sleep( 500 );
    }
    catch ( InterruptedException ex ) {
    }
  }

  public static void main( String[] args ) 
  {
    AutoScroll autoscroll = new AutoScroll();
  }
}

Gruß
Tobias
 
Das sieht schon mal ganz gut aus, aber es funktioniert noch nicht so sauber!

Es kommt manchmal eine Linie im Textfeld!

Wofür braucht man den sleep()?

Gruß
Sebastian
 
Du kannst es auch mal so versuchen:

Code:
    JTextArea t = new JTextArea();
    t.setCaretPosition(t.getText().length());
 
Öhm.. Das sleep brauchst du gar nicht, es war nur dazu da um einen Verzögerungseffekt zu erzeugen ;)
Aber was meinst du denn für eine Linie?

//edit Ich hab jetzt noch mal ein bischen rumprobiert und seh das das irgendwie mit dem synchronisieren der Anzeige nicht so ganz hinhaut.. Wenn du das ergänzt um die letzte Zeile kommen bei mir die Linien nicht mehr:
Java:
      int max = scroll.getVerticalScrollBar().getMaximum();
scroll.getVerticalScrollBar().setValue( max );
scroll.repaint();

Gruß
Tobias
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück