Я второй совет, чтобы просто поместить JTextArea в JScrollPane и позволить этому позаботиться о дополнительном тексте.Кроме того, и, возможно, самое главное, не устанавливает границы JTextArea , потому что если вы делаете это, вы ограничиваете его до определенного размера, а это не то, чего вы хотите, чтобы это произошло.Вместо этого инициализируйте вашу JTextArea двумя константами int, чтобы представить количество строк и столбцов, которые должны быть визуализированы, а затем поместите его в JScrollPane.Также обязательно ознакомьтесь с использованием менеджеров компоновки, чтобы избежать установки размера JScrollPane!
Редактировать: при тестировании кажется, что setPreferredSize более опасен для JTextArea, чем setSize.
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.*;
public class ConstrainedTextArea extends JPanel {
private JTextArea textArea1, textArea2, textArea3;
public ConstrainedTextArea() {
textArea1 = new JTextArea(20, 30);
textArea2 = new JTextArea();
textArea3 = new JTextArea();
textArea2.setPreferredSize(new Dimension(300, 300));
textArea3.setSize(textArea3.getPreferredSize());
setLayout(new GridLayout(1, 0));
add(new JScrollPane(textArea1));
add(new JScrollPane(textArea2));
add(new JScrollPane(textArea3));
}
private static void createAndShowUI() {
JFrame frame = new JFrame("ConstrainedTextArea");
frame.getContentPane().add(new ConstrainedTextArea());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}