2014-01-16 27 views
1

我有一個JTextArea在一個小應用程序,顯示所有例外e.getMessage和其他東西。但是,JScrollPane不顯示最新結果。我必須手動滾動它才能看到剛發生的事情。如何將文本添加到我的JScrollPane/JArea時自動滾動?

我希望它與Eclipse控制檯完全一樣

如何設置光標?

這裏是我的代碼

publiv void createGUI)({ 

       JTextArea progress = new JTextArea(""); 

     JScrollPane jsp = new JScrollPane(progress); 
     jsp.setBounds(320, 10, 280, 300); 
     j.add(jsp) ; 

     JScrollBar max = jsp.getVerticalScrollBar() ; 
     max.setValue(max.getMaximum()) ;  // I tried this as suggested by Yasmani Llanes, but it did not work 
... 
+0

是否要設置光標? –

+1

請發佈您的代碼,但如果您使用[ScrollPane](http://docs.oracle.com/javase/7/docs/api/java/awt/ScrollPane.html),則可以調用[setScrollPosition]( http://docs.oracle.com/javase/7/docs/api/java/awt/ScrollPane.html#setScrollPosition%28java.awt.Point%29)。 –

+0

請注意,Eclipse控制檯使用'SWT'而不是'Swing' –

回答

3

嘗試設置插入位置在文本結尾:

progress.setCaretPosition(progress.getText().length()) 

以下示例適用於我:

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

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


public class Test extends JFrame { 
    private JTextArea txtTest; 

    Test() { 
     this.setSize(500, 300); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setLayout(new BorderLayout()); 

     JScrollPane pane = new JScrollPane(); 
     txtTest = new JTextArea(); 
     pane.setViewportView(txtTest); 
     this.add(pane, BorderLayout.CENTER); 

     JButton btnAddText = new JButton("Add Text"); 
     btnAddText.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       txtTest.setText(txtTest.getText() + "\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sagittis id nibh vel rhoncus. "); 

       String text = txtTest.getText(); 

       txtTest.setCaretPosition(text != null ? text.length() : 0); 
      } 
     }); 
     this.add(btnAddText, BorderLayout.SOUTH); 

     this.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Test();    
      } 
     }); 
    } 
} 
+1

謝謝。這正是我需要的〜!!〜 –

+0

不客氣! =) – higuaro

2

獲取您的JScrollPane滾動條的保留,並滾動至底部:

JScrollBar vertical = scrollPane.getVerticalScrollBar(); 
vertical.setValue(vertical.getMaximum()); 
+0

這應該如何與用戶交互?如果他們想要,他們能夠向上滾動嗎? – Pureferret

相關問題