首页javajscrollpaneJava Swing - 如何当JTextArea超过一定量的行时启用滚动条

Java Swing - 如何当JTextArea超过一定量的行时启用滚动条

我们想知道如何当JTextArea超过一定量的行时启用滚动条。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class Main {

  public static void main(String[] args) {
    JPanel topPanel = new JPanel();
    topPanel.setPreferredSize(new Dimension(200, 200));
    topPanel.setBackground(Color.WHITE);

    JTextArea chatArea = new JTextArea();
    JScrollPane scrollPane = new JScrollPane(chatArea);

    JPanel mainPanel = new JPanel(new BorderLayout(5, 5));
    mainPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
    mainPanel.add(topPanel, BorderLayout.CENTER);
    mainPanel.add(scrollPane, BorderLayout.SOUTH);

    chatArea.getDocument().addDocumentListener(new DocumentListener() {

      @Override
      public void insertUpdate(DocumentEvent e) {
        updateLineCount();
      }

      @Override
      public void removeUpdate(DocumentEvent e) {
        updateLineCount();
      }

      @Override
      public void changedUpdate(DocumentEvent e) {
        updateLineCount();
      }

      private void updateLineCount() {
        int lineCount = chatArea.getLineCount();
        if (lineCount <= 4) {
          chatArea.setRows(lineCount);
          mainPanel.revalidate();
        }
      }
    });

    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.add(mainPanel);
    f.pack();
    f.setVisible(true);
  }
}