Acabo de probar algunas cosillas.
Con un JTextArea no hay problema al incluir el "\n". He añadido un scroll simple, que sólo aparece cuando se superan el número de líneas mostradas. Todo eso tiene más opciones, como mostrar scroll horizontal y vertical, sólo cuando sea necesario, o deshabilitarlo, etc., pero lo básico está.
Código:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Prueba extends JDialog{
private static final long serialVersionUID = 7082453483732076013L;
private JTextArea area;
private JTextField texto;
private JButton boton;
private JScrollPane scroll;
private JPanel panelInferior;
private int cont = 1;
public void inicializa (){
area = new JTextArea();
boton = new JButton ("AGREGAR");
texto = new JTextField ("Inserte texto y pulse agregar...");
scroll = new JScrollPane(area);
panelInferior = new JPanel ();
panelInferior.setLayout(new GridLayout(2,1));
panelInferior.add(texto);
panelInferior.add(boton);
super.setLayout(new BorderLayout());
super.add(scroll, BorderLayout.CENTER);
super.add(panelInferior, BorderLayout.SOUTH);
this.manejadores();
super.setSize(300, 300);
super.setTitle("Prueba JTextArea");
super.setLocationRelativeTo(null);
super.setResizable(false);
}
public void manejadores (){
boton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evento) {
area.setText(area.getText() + cont + ". " + texto.getText() + "\n");
cont++;
}
});
super.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}
public static void main (String[] args) throws Exception{
Prueba p = new Prueba();
p.inicializa();
p.setVisible(true);
}
}
Insertas texto en el JTextField y al darle a agregar se incluye en el JTextArea creando una nueva línea.
Espero que te sirva.