2014-04-29 16 views
6

Ho creato un JFrame, con un JTextArea. Vorrei scorrere la textarea automaticamente, dopo ogni aggiunta. Come dovrei gestirlo?Come scorrere automaticamente JTextArea dopo l'aggiunta?

Ho provato log.setCaretPosition(log.getDocument().getLength());, ma non è cambiato nulla.

package scrollit; 

import java.awt.*; 
import javax.swing.*; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 

public class ScrollIt extends JFrame {  

    public static void main(String[] args) {    
     ScrollIt sc = new ScrollIt();    
    } 

    public ScrollIt() { 
     super();    
     JTextArea log = new JTextArea(); 
     log.setPreferredSize(new Dimension(50,50)); 
     setDefaultCloseOperation(EXIT_ON_CLOSE);    
     add(log);    
     pack(); 
     setVisible(true); 

     log.append("a\n"); 
     log.append("b\n"); 
     log.append("c\n"); 
     log.append("d\n"); 
     log.append("e\n"); 
     log.append("f\n"); 
    } 
} 

risposta

17

ci sono due modi (ma JTextArea devono essere disposti in JScrollPane)

a) prevedono Caret (corretto modi)

esempio

DefaultCaret caret = (DefaultCaret) log.getCaret(); 
    caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 

b) che si muove con JScrollBar (da JScrollPane) al suo valore massimo

+1

Ho provato la tua a) tecnica. ha funzionato come un fascino! :) – simgineer

+1

@simgineer: ovviamente lo ha fatto! –

0

Il mio è un po 'più semplice ed efficiente. Impostiamo il cursore sulla lunghezza del testo per metterlo alla fine in questo modo.

public void appendText(String str){ 
    txtArea.append(str + "\n"); 
    scrollDown(); 
} 

public void scrollDown(){ 
    txtArea.setCaretPosition(txtArea.getText().length()); 
} 
Problemi correlati