outerPanel.add(scrollPane, BorderLayout.CENTER);
BoxLayout は制約を受けないため、BorderLayout.CENTER は不要です。
問題は、BoxLayout が、スクロールペインに対して非常に大きく設定されているコンポーネントの最大サイズを尊重することです。
BoxLayout を使用する代わりに、FlowLayout を持つパネルを使用してください。
以下の例を実行して、現在何をしているかを確認してください。次に、setLayout(...) ステートメントをコメントアウトして、再度実行します。デフォルトでは、パネルは FlowLayout を使用するため、必要なものが得られます。
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class SSCCE extends JPanel
{
public SSCCE()
{
setLayout( new BoxLayout(this, BoxLayout.PAGE_AXIS));
JTextArea textArea = new JTextArea(5, 30);
JScrollPane scrollPane = new JScrollPane(textArea);
//scrollPane.setMaximumSize( scrollPane.getPreferredSize() );
add(scrollPane);
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new SSCCE() );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
または、本当に BoxLayout を保持したい場合は、setLayout(...) ステートメントをそのままにして、最大サイズを優先サイズに設定します。多くの人は、「setXXX()」メソッドを直接呼び出すべきではなく、代わりにスクロールペインの setMaximumSize() メソッドをオーバーライドして、優先サイズを返すようにすべきだと言うでしょう。
これら 2 つのソリューションをテストするときは、ウィンドウをスクロール ペインよりも小さくして、各レイアウトの動作の違いを確認してください。