2016-06-29 15 views
1

Ich habe ein JTabbedPane mit JTextAreas als Komponenten. Mit einer anderen Methode füge ich Texte zu TextAreas hinzu. Aber wenn der Textbereich voll ist, scrollt er nicht nach unten, so dass ich die neuesten Texte nicht sehen kann. Wie kann ich das lösen?JTabbedPane mit JTextAreas. Automatisch nach unten scrollen

public class View extends JFrame{ 

    public class Field extends JTextArea{ 
    public Field(){ 
     this.setEditable(false); 
     this.setLineWrap(true); 
     DefaultCaret caret = (DefaultCaret)this.getCaret(); 
     caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 
    } 

} 

    public View(){ 


    this.setLayout(new BorderLayout()); 
    this.tabs = new JTabbedPane(); 
    this.tabs.add("abc", new Field()); 

    this.add(tabs, BorderLayout.CENTER); 

} 
} 

Antwort

2

Sie benötigen JTextArea innerhalb eines JScrollPane zu setzen, um es scrollbaren zu machen:

import javax.swing.*; 
import javax.swing.text.DefaultCaret; 
import java.awt.*; 

public class Example { 

    public static void main(String[] args) { 

     JFrame jFrame = new JFrame(); 

     JTextArea textArea = new JTextArea(); 
     DefaultCaret caret = (DefaultCaret)textArea.getCaret(); 
     caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 

     JScrollPane jScrollPane = new JScrollPane(textArea); 
     jScrollPane.setPreferredSize(new Dimension(300, 300)); 

     JTabbedPane tabbedPane = new JTabbedPane(); 
     tabbedPane.addTab("abc", jScrollPane); 

     jFrame.setContentPane(tabbedPane); 

     jFrame.pack(); 
     jFrame.setVisible(true); 

     for(int i = 0; i < 100; i ++) { 
      textArea.append(i + "\n"); 
     } 
    } 
} 
+0

Danke. Aber wenn ich den scrollPane zu meinem Code hinzufüge, ändert sich nichts. Ich kann die ScrollPane nicht sehen. Ist es möglich, dass das Problem von BorderLayout erstellt wird? Da die TextArea auch nicht die Größe hat, die ich dafür festgelegt habe – Alex

+0

Mit der OP-Einstellung der Caret-Richtlinie auf ALWAYS_UPDATE sollte der Aufruf von setCaretPosition nicht benötigt werden. Und wenn Sie eine andere Update-Richtlinie verwenden, sollte der Aufruf von setCaretPosition einmal nach der Schleife erfolgen, – FredK

+0

@FredK Sie haben Recht, korrigiert. – explv