sto scrivendo una GUI dove voglio ci sia un pannello principale che contenga diverse JTextArea che vadano a capo in automatico. Il tutto dentro a uno JScrollPane per avere scrolling verticale.

Il problema è che il testo si "unwrappa" correttamente quando allargo la finestra, ma poi se ne riduco le dimensioni non ritorna ad andare a capo automaticamente.

Avete idea di come possa risolvere?

Ringrazio in anticipo per qualsiasi tipo di aiuto

se è di aiuto ecco il sorgente:
codice:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

public class GUI implements Observer{
	
	private JFrame mainWindow;
	private JPanel controlsPane;
	private JPanel bodyPane;
	private JButton _refresh = new JButton("refresh");
	private GridBagConstraints gbc = new GridBagConstraints();
	
	public GUI (){
		try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}
		catch (Exception e) { }

		mainWindow = new JFrame("frame");
		mainWindow.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		mainWindow.setLayout(new BorderLayout());
		mainWindow.setBounds(new Rectangle(new Dimension(100,200)));			
		controlsPane = new JPanel();
		controlsPane.setLayout(new FlowLayout());
		_refresh.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent e) {
				System.out.println("refresh");
				bodyPane.invalidate();
				bodyPane.validate();
			}
		});
		controlsPane.add(_refresh);

		controlsPane.setBounds(new Rectangle(new Dimension(100,100)));
		bodyPane = new JPanel();
		JScrollPane scrollPane = new JScrollPane(bodyPane,
				JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		
//		bodyPane.setLayout(new BoxLayout(bodyPane,BoxLayout.Y_AXIS));
		bodyPane.setLayout(new GridBagLayout());
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.weightx = 100;
		gbc.weighty = 0;
		gbc.anchor = GridBagConstraints.NORTH;
		for (int _i = 0; _i < 10 ; _i++){

			JTextArea _text = new JTextArea();
			_text.setMinimumSize(new Dimension(100,10));
			_text.setEditable(false);
			_text.setFont(new Font("Serif",Font.BOLD,12));
			_text.setText("asddssf vasscg sg sgs fsgg sfsgs sad"+_i);
			_text.setLineWrap(true);
			_text.setWrapStyleWord(true);

			gbc.gridy = _i;
			
			bodyPane.add(_text, gbc);
		}
		
		mainWindow.add(controlsPane, BorderLayout.NORTH);
		mainWindow.add(scrollPane);
		mainWindow.setVisible(true);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new GUI();
	}

	public void update(Observable o1, Object o2) {

	}

}