Java 如何在文本添加到我的JScrollPane/JArea时自动滚动?

Java 如何在文本添加到我的JScrollPane/JArea时自动滚动?,java,swing,jscrollpane,jtextarea,caret,Java,Swing,Jscrollpane,Jtextarea,Caret,我在一个小应用程序中有一个JTextArea,它显示了所有异常e.getMessage和其他东西。但是,JScrollPane不会显示最新的结果。我必须手动滚动它,这样我才能看到刚才发生了什么 我希望它完全像Eclipse控制台一样 如何设置光标 这是我的密码 publiv void createGUI)( { JTextArea progress = new JTextArea(""); JScrollPane jsp = new JScro

我在一个小应用程序中有一个
JTextArea
,它显示了所有异常
e.getMessage
和其他东西。但是,JScrollPane不会显示最新的结果。我必须手动滚动它,这样我才能看到刚才发生了什么

我希望它完全像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
...

按住
JScrollPane
中的滚动条,并将其滚动到底部:

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

按住
JScrollPane
中的滚动条,并将其滚动到底部:

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

尝试在文本末尾设置插入符号位置:

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();             
            }
        });
    }
}

尝试在文本末尾设置插入符号位置:

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();             
            }
        });
    }
}

是否要设置游标?请发布您的代码,但如果您正在使用,则可以调用。请注意,Eclipse控制台使用
SWT
not
Swing
如何设置进度控件的新文本?DefaultCaret caret=(DefaultCaret)text.getCaret();和插入符号setUpdatePolicy(DefaultCaret.ALWAYS\u UPDATE);是否要设置游标?请发布您的代码,但如果您正在使用,则可以调用。请注意,Eclipse控制台使用
SWT
not
Swing
如何设置进度控件的新文本?DefaultCaret caret=(DefaultCaret)text.getCaret();和插入符号setUpdatePolicy(DefaultCaret.ALWAYS\u UPDATE);非常感谢。这正是我需要的~~非常感谢。这正是我需要的~~这应该如何与用户交互?如果他们愿意,他们是否能够向上滚动?这应该如何与用户交互?如果他们愿意,他们可以向上滚动吗?