Java 如何在JTextArea中滚动

Java 如何在JTextArea中滚动,java,swing,append,jtextfield,jtextarea,Java,Swing,Append,Jtextfield,Jtextarea,我有一个JtextArea,我必须在其中追加文本,我希望在追加新文本时它向下滚动。我已经做了以下工作,但它不起作用 showFrame = new JFrame("Gui Console"); showArea = new JTextArea(); showArea.setBorder(new TitledBorder("Console")); showArea.setPreferredSize(new Dimension(500, 400));

我有一个JtextArea,我必须在其中追加文本,我希望在追加新文本时它向下滚动。我已经做了以下工作,但它不起作用

showFrame = new JFrame("Gui Console");


    showArea = new JTextArea();

        showArea.setBorder(new TitledBorder("Console"));
        showArea.setPreferredSize(new Dimension(500, 400));
        showArea.setMinimumSize(new Dimension(500, 400));
        showArea.setMaximumSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE));
        showArea.getDocument().addDocumentListener(new DocumentListener() {

            public void insertUpdate(DocumentEvent e) {
                JScrollBar vertical = scrollPane.getVerticalScrollBar();
                scrollPane.getVerticalScrollBar().setValue( vertical.getMaximum() );;

            }

            public void removeUpdate(DocumentEvent e) {

            }

            public void changedUpdate(DocumentEvent e) {

            }

        });
唯一有效的方法是设置

showArea.setPreferredSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE));
但是窗户太大了,我不想要它

试试这个

JScrollPane scrollPane = new JScrollPane(showArea,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setPreferredSize(new Dimension(500, 400));
add(scrollPane);

这可能对你有帮助。而
scrollPane
是用
JFrame
JPanel
添加的。无需
showArea

您只需将JTextArea放在JScrollPane中即可

DefaultCaret caret = (DefaultCaret)yourTextArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Test extends JFrame {

    public Test() {
        super("Test");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JTextArea text = new JTextArea(5,20);
        text.setWrapStyleWord(true);
        text.setLineWrap(true);

        JScrollPane jsp = new JScrollPane(text, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        add(jsp);

        pack();

        setVisible(true);

    }

    public static void main(String[] args) {

        new Test();

    }

}

希望有帮助,Salam

不要使用任何设置首选/最小/最大大小的方法。文本区域将在追加文本时自动重新计算首选大小。